拦截器的编写必须实现HandleIntegerCeptor接口,在xml配置文件中 添加
客户端发送请求,首先经过prehandle方法,此时获取绑定的数据,如果已经登录并且绑定数据则返回true,如果没有登录绑定数据则返回false并且跳转到其他的页面
public class LoginIntercepter extends HandlerInterceptorAdapter{ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { HttpSession session = request.getSession(); User u = (User) session.getAttribute('user');
if(u!=null){ System.out.println('拦截器验证登录'); return true; } System.out.println('拦截器验证未登录'); response.sendRedirect('login.do'); return false; }
此方法只有在请求期间发生异常时执行@Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println('异常时执行'); super.postHandle(request, response, handler, modelAndView); }
@Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println('拦截器执行完毕'); super.afterCompletion(request, response, handler, ex); }此方法会在拦截器成功时执行,如果发生异常则不执行此方法,该方法的执行依赖对应的preHandle 方法的返回值为true 时才会执行;
整个拦截器的模式责任链模式,(在一个请求或者链上有多个处理拦截)(个人理解),这种开发模式可以认为是责任链模式;