SpringMVC的拦截器HandlerInteceptorAdapter,实现其中的三个方法 preHandler,postHandler,completion三个方法
preHandler在业务处理前调用,可以加一些权限验证方法,比如session验证、token验证, 如果验证true,则往下进行下一个interceptor;如果false,从当前拦截器往前,执行前面拦截器的afterCompletion的方法,退出拦截器链
postHandler在处理逻辑完,生成视图前执行
afterCompletion视图呈现完成后,相当于完成一个request->respone请求,可以用于完成资源的清理
所以我们实现这三个方法,(个人认为其实只需要实现preHandler即可)实现自己的权限逻辑管理
定义一个类 继承 HandlerInceptorAdapter,实现上面的三个方法,在preHandler方法里,要注意有些页面不需要验证,比如login 、logout,对于这些请求直接放行,也就是return true
@Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 定义一些不需要认证的页面,直接放行 if (request.getRequestURI().contains("login") || request.getRequestURI().contains("logout")) { return true; } // 需要认证的页面,判断session UserInfo userInfo = (UserInfo)request.getSession().getAttribute("activeUser"); if (userInfo == null) { response.sendRedirect("loginPage"); return false; } return true; }
然后在springMVC.xml(名字自己的,就是你配置在web.xml里面springMVC DispatcherServlet对应的spring配置文件)拦截器配置
<!-- spring 拦截器 --> <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/authen/**"/> <mvc:mapping path="/goods/**"/> <bean class="com.think.interceptor.LoginInterceptor" /> </mvc:interceptor> <mvc:interceptor> <mvc:mapping path="/goods/**"/> <bean class="com.think.interceptor.PermissionInterceptor" /> </mvc:interceptor> </mvc:interceptors>
<mvc:interceptors>标签下可以配置多个拦截器,<mvc:mapping path=""> 表示你对那些请求URI拦截,bean表示对拦截的这些请求由那个拦截器类处理
下一篇学习下权限验证框架shiro