springmvc中有两种很普遍的AOP实现:
1.过滤器(Filter)
2.拦截器(Interceptor)
之前文章已经介绍过filter的用法,这里重点介绍interceptor。
1)定义interceptor:
public class SessionInterceptor extends HandlerInterceptorAdapter {
    private static String[] IGNORE_URI = {"/login.jsp", "/login/","/login","/loginIndex", "/error"};
    private static Logger log = LoggerFactory.getLogger(SessionInterceptor.class);  
    
    
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        boolean flag = false;
        String url = request.getRequestURL().toString();
        
        for (String s : IGNORE_URI) {
            if (url.contains(s)) {
                flag = true;
                break;
            }
        }
        if (!flag) {
            Object obj = request.getSession().getAttribute(Constants.SESSION_USER);  
            if (null == obj) {//未登录
                String servletPath = request.getServletPath();
                log.error("session失效,当前url:" + url+";module Paht:"+servletPath);
                if (request.getHeader("x-requested-with") != null && 
                                request.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")){
                    
                    response.setHeader("sessionstatus", "timeout");//在响应头设置session状态  
                    response.setCharacterEncoding("text/html;charset=utf-8");
                    response.setContentType("text/html;charset=utf-8");
                    response.getWriter().print("error");
                } else {
                    response.sendRedirect(request.getContextPath()+"/user/loginIndex");
                }
                return false;
            } else {
                /*User user = (User)obj;
                if(!RightUtil.hasRight(currentURLTemp, request)){
                    if(!"iisAdminTmp".equals(user.getName()) && !"/index".equals(targetURL)){
                        //response.sendRedirect(request.getContextPath()+"/login/login");//应该返回到没有权限的页面
                        //request.getRequestDispatcher("/login/login").forward(request, response);
                        return false;
                    }
                }*/
            }
        }
        return super.preHandle(request, response, handler);
    }
     
    
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        super.postHandle(request, response, handler, modelAndView);
    }2)在springboot中,指定interceptor:
public class MyMvcConfig extends WebMvcConfigurerAdapter {
    /**
     * 静态资源配置
     */
    /*@Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/img/**")
                .addResourceLocations("classpath:/imgs/");
        
        super.addResourceHandlers(registry);
    }*/
    
    /**
     * 默认首页配置
     */
    
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("forward:/index");
        registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
        super.addViewControllers(registry);
    } 
    
    /**
     * interceptor配置
     */
    
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new SessionInterceptor())
                //添加需要验证登录用户操作权限的请求
                .addPathPatterns("/**")
                //排除不需要验证登录用户操作权限的请求
                .excludePathPatterns("/css/**")
                .excludePathPatterns("/js/**")
                .excludePathPatterns("/images/**");
    }
}通过WebMvcConfigurerAdapter可以配置很多mvc的项,例如:interceptor、静态资源、首页等等。
                










