1. 程式人生 > >spring aop before 返回

spring aop before 返回

1.aop獲取request,response,session等

public class SysContext {
	private static ThreadLocal<HttpServletRequest> requestLocal=new ThreadLocal<HttpServletRequest>();
	private static ThreadLocal<HttpServletResponse> responseLocal=new ThreadLocal<HttpServletResponse>();
	
	public static HttpServletRequest getRequest(){
		return requestLocal.get();
	}
	
	public static void setRequest(HttpServletRequest request){
		requestLocal.set(request);
	}
	
	public static HttpServletResponse getResponse(){
		return responseLocal.get();
	}
	
	public static void setResponse(HttpServletResponse response){
		responseLocal.set(response);
	}
	
	public static HttpSession getSession(){
		return (HttpSession)(getRequest()).getSession();
	}
}

2.新增過濾器

public class GetContextFilter implements Filter{

	@Override
	public void destroy() {
		
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		SysContext.setRequest((HttpServletRequest)request);
		SysContext.setResponse((HttpServletResponse)response);
		chain.doFilter(request, response);
	}

	@Override
	public void init(FilterConfig config) throws ServletException {
		
	}

}

3.配置web.xml

將這部分放置在最前面,這樣可以過濾到所有的請求

	<filter>
		<filter-name>sessionFilter</filter-name>
		<filter-class>com.unei.filter.GetContextFilter</filter-class>
	</filter>
	
	<filter-mapping>
		<filter-name>sessionFilter</filter-name>
		<url-pattern>*</url-pattern>
	</filter-mapping>

4.spring aop before

從session中取出使用者名稱,如果不存在,丟擲異常跳轉,將錯誤資訊放到request中

@Aspect
public class AdminAspect {
	ActionContext context = ActionContext.getContext();
	HttpServletRequest request;
	HttpServletResponse response;

	@Before("execution(* com.unei.Action.AdminAction.getPrivileges(..))")
	public void adminPrivilegeCheck()
			throws Throwable {
		HttpSession session = SysContext.getSession();
		request = SysContext.getRequest();
		response = SysContext.getResponse();
		String userName = "";
		
		try {
			userName = session.getAttribute("userName").toString();
			if(userName==null||userName.equals(""))
				throw new Exception("no privilege");
		} catch (Exception ex) {
			request.setAttribute("msg", "{\"res\":\"" + "無許可權" + "\"}");
			try {
				request.getRequestDispatcher("/jsp/json.jsp").forward(
						request, response);
			} catch (ServletException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

5.applicationContext.xml

<bean id="adminAspect" class="com.unei.aop.AdminAspect"></bean>
菜鳥學習筆記,歡迎指正。