1. springmvc 中的拦截器是由实现 HandlerInterceptor 或者继承 HandlerInterceptorAdapter 来实现的。
2. 自定义实现一个拦截器的步骤:
a). 定义一个实现 HandlerInterceptor 接口 的类
public class MyInterceptor implements HandlerInterceptor{/*** 在处理方法之前执行,一般用来做一些准备工作:比如日志,权限检查* 如果返回false 表示被拦截,将不会执行处理方法* 返回true继续执行处理方法*/@Overridepublic boolean preHandle(HttpServletRequest req, HttpServletResponse resp, Object handler) throws Exception {System.out.println("执行preHandler---------"+req.getRemoteHost()+req.getRemoteUser());resp.sendRedirect("index.jsp");return false;}/*** 在处理方法执行之后,在渲染视图执行之前执行,一般用来做一些清理工作*/@Overridepublic void postHandle(HttpServletRequest req, HttpServletResponse resp, Object handler, ModelAndView mv)throws Exception {System.out.println("执行postHandler");}/*** 在视图渲染后执行 一般用来释放资源*/@Overridepublic void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)throws Exception {System.out.println("执行afterCompletion");} }
b) 在 springmvc 的配置文件中 ,添加拦截器配置
<mvc:interceptors><!-- 定义一个拦截器的配置 --><mvc:interceptor><!-- mapping 指定哪些url被拦截 /*表示根路径下的所有请求被拦截-/hello.do/**表示根路径及其子路径下的所有请求被拦截/user/add.do--><mvc:mapping path="/**"/><!-- 配置拦截器的路径 --><bean class="cn.sxt.interceptor.MyInterceptor"></bean></mvc:interceptor></mvc:interceptors>
c) 测试
3. 登录拦截器实现
public class LoginInterceptor extends HandlerInterceptorAdapter{@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception {//验证请求的地址是否是登录地址 如果是继续往下执行String uri=request.getRequestURI();uri = uri.substring(uri.lastIndexOf("/")+1);if(uri.equals("login.do")){return true;}//验证session中是否有用户存在 如果有 继续执行if(request.getSession().getAttribute("username")!=null){return true;}//执行跳转到登录页面response.sendRedirect(request.getContextPath()+"/login.jsp");return false;} }