Spring AOP + 사용자 정의 주석 세 션 검증

http://blog.csdn.net/xiadi934/article/details/18258961
배경: SpringMVC 프레임 워 크 에서 Controller 계층 에 사용자 권한 이 필요 한 방법 에 대해 Session 에서 사용자 나 관리자 의 인증 을 추가 합 니 다.
NeedSession. java - 주해 류
/** 
 *   Session  ,      <br/> 
 *    value = SessionType.USER 
 *  
 * @author Xiadi 
 * @since 2013-9-10 
 */  
@Retention(RetentionPolicy.RUNTIME)  
@Target(ElementType.METHOD)  
public @interface NeedSession {  
    /** 
     * Session      <br/> 
     *    USER 
     *  
     * @return 
     */  
    SessionType value() default SessionType.USER;  
}
 
SessionType. java - 매 거 진 클래스
/** 
 * Session User    
 * 
 */  
public enum SessionType {  
    /** 
     *        
     */  
    OR,  
  
    /** 
     *      
     */  
    USER,  
  
    /** 
     *     
     */  
    MANAGER  
} 

SysContent. java - web 요청 의 상하 문 클래스
/** 
 * Web   ,    request response 
 *  
 */  
public class SysContent {  
    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 requestLocal.get().getSession();  
    }  
}

SessionValidateFilter. java - 필터
/** 
 * Session   ,         
 *  
 */  
public class SessionValidateFilter implements Filter{  
      
    @Override  
    public void init(FilterConfig filterConfig) throws ServletException {         
    }  
  
    @Override  
    public void doFilter(ServletRequest request, ServletResponse response,  
            FilterChain chain) throws IOException, ServletException {         
         SysContent.setRequest((HttpServletRequest) request);  
         SysContent.setResponse((HttpServletResponse) response);  
         chain.doFilter(request, response);   
    }  
  
    @Override  
    public void destroy() {  
    }  
}  

SessionAOP. 자바 - AOP 절단면 업무 류
/** 
 * Session AOP    
 *  
 */  
@Component  
@Aspect  
public class SessionAOP {  
      
    @Around(value = "@annotation(com.eaglec.plat.hj.aop.NeedSession)")  
    public Object aroundManager(ProceedingJoinPoint pj) throws Exception {  
        HttpServletRequest request = SysContent.getRequest();  
        HttpServletResponse response = SysContent.getResponse();  
        HttpSession session = SysContent.getSession();  
  
        String path = request.getContextPath();  
        String basePath = request.getScheme() + "://" + request.getServerName()  
                + ":" + request.getServerPort() + path + "/";  
  
        SessionType type = this.getSessionType(pj);  
        if (type == null) {  
            throw new Exception("The value of NeedSession is must.");  
        }  
  
        Object uobj = session.getAttribute("user");  
        Object mobj = session.getAttribute("manager");  
          
        boolean isUser = type == SessionType.USER && uobj != null;  
        boolean isManager = type == SessionType.MANAGER && mobj != null;  
        boolean isUserOrManager = type == SessionType.OR&& (mobj != null || uobj != null);  
        try {  
            if (isUser || isManager || isUserOrManager) {                 
                return pj.proceed();  
            } else { //       session      
                if (request.getHeader("x-requested-with") != null      
                        && request.getHeader("x-requested-with").equalsIgnoreCase(    //ajax         
                                "XMLHttpRequest")) {       
                    response.addHeader("sessionstatus", "timeout");   
                    //   EasyUi    
                    response.getWriter().print("{\"rows\":[],\"success\":false,\"total\":0}");       
                }else{//http           
                    response.sendRedirect(basePath + "error/nosession");  
                }    
            }  
        } catch (Throwable e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  
        return null;  
    }  
  
    private SessionType getSessionType(ProceedingJoinPoint pj) {  
        //       Method  
        MethodSignature joinPointObject = (MethodSignature) pj.getSignature();  
        Method method = joinPointObject.getMethod();  
        boolean flag = method.isAnnotationPresent(NeedSession.class);  
        if (flag) {  
            NeedSession annotation = method.getAnnotation(NeedSession.class);  
            return annotation.value();  
        }  
        return null;  
    }  
  
}  

web.xml
<!-- spring session aop -->  
    <filter>  
        <filter-name>sessionValidate</filter-name>  
        <filter-class>com.eaglec.plat.hj.aop.SessionValidateFilter</filter-class>  
    </filter>  
    <filter-mapping>  
        <filter-name>sessionValidate</filter-name>  
        <url-pattern>/*</url-pattern>  
    </filter-mapping>  

servlet-context.xml
<aop:aspectj-autoproxy/>

좋은 웹페이지 즐겨찾기