springmvc的拦截器

来源:互联网 发布:mac 标志发亮 编辑:程序博客网 时间:2024/04/28 12:39
用户请求到dispatchservlet,DispatchServlet调用HandlerMapping查找Handler,HandlerMapping返回一个拦截链(多个拦截),springmvc中的拦截器是通过HandlerMapping发起的。可用于用户省份认证,权限认证。
public class HandlerInterceptor1 implements HandlerInterceptor {    //在执行handler之前来执行的    //用于用户认证校验、用户权限校验    @Override    public boolean preHandle(HttpServletRequest request,            HttpServletResponse response, Object handler) throws Exception {        System.out.println("HandlerInterceptor1...preHandle");        //如果返回false表示拦截不继续执行handler,如果返回true表示放行        return false;    }    //在执行handler返回modelAndView之前来执行    //如果需要向页面提供一些公用 的数据或配置一些视图信息,使用此方法实现 从modelAndView入手    @Override    public void postHandle(HttpServletRequest request,            HttpServletResponse response, Object handler,            ModelAndView modelAndView) throws Exception {        System.out.println("HandlerInterceptor1...postHandle");    }    //执行handler之后执行此方法    //作系统 统一异常处理,进行方法执行性能监控,在preHandle中设置一个时间点,在afterCompletion设置一个时间,两个时间点的差就是执行时长    //实现 系统 统一日志记录    @Override    public void afterCompletion(HttpServletRequest request,            HttpServletResponse response, Object handler, Exception ex)            throws Exception {        System.out.println("HandlerInterceptor1...afterCompletion");    }
public class LoginInterceptor implements HandlerInterceptor {//在执行handler之前来执行的//用于用户认证校验、用户权限校验@Overridepublic boolean preHandle(HttpServletRequest request,        HttpServletResponse response, Object handler) throws Exception {    //得到请求的url    String url = request.getRequestURI();    //判断是否是公开 地址    //实际开发中需要公开 地址配置在配置文件中    //...    if(url.indexOf("login.action")>=0){        //如果是公开 地址则放行        return true;    }    //判断用户身份在session中是否存在    HttpSession session = request.getSession();    String usercode = (String) session.getAttribute("usercode");    //如果用户身份在session中存在放行    if(usercode!=null){        return true;    }    //执行到这里拦截,跳转到登陆页面,用户进行身份认证    request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response);    //如果返回false表示拦截不继续执行handler,如果返回true表示放行    return false;}//在执行handler返回modelAndView之前来执行//如果需要向页面提供一些公用 的数据或配置一些视图信息,使用此方法实现 从modelAndView入手@Overridepublic void postHandle(HttpServletRequest request,        HttpServletResponse response, Object handler,        ModelAndView modelAndView) throws Exception {    System.out.println("HandlerInterceptor1...postHandle");}//执行handler之后执行此方法//作系统 统一异常处理,进行方法执行性能监控,在preHandle中设置一个时间点,在afterCompletion设置一个时间,两个时间点的差就是执行时长//实现 系统 统一日志记录@Overridepublic void afterCompletion(HttpServletRequest request,        HttpServletResponse response, Object handler, Exception ex)        throws Exception {    System.out.println("HandlerInterceptor1...afterCompletion");}
原创粉丝点击