springmvc 之 拦截器

1. 拦截器在 mvc 框架中,起到了重要的作用,比如权限的检查,登陆验证等功能。

2. 在springmvc 中拦截器的实现方式有两种:HandlerIntercepted 接口和继承HandleInterceptedAdaptor类。

3. 实现自定义拦截器步骤:

  • 自定义拦截器:
    /**
     * 自定义拦截器实现
    */
    public class MyInterceptor implements HandlerInterceptor{
    
        /**
         * 在处理器执行前执行,该方法返回true会继续执行下一个拦截器或者执行处理器方法
         * 如果返回false将不再往下执行
         * 一般进行一些初始化动作 比如 权限检查,登录检查
         */
        public boolean preHandle(HttpServletRequest req, HttpServletResponse resp,
                Object handler) throws Exception {
            System.out.println("prehandle");
            //resp.sendRedirect("index.jsp");
            return true;
        }
        /**
         * preHandler返回true才会执行
         * postHandle在处理器执行后, 在数据模型被渲染前执行
         * 一般可用于处理数据模型,需要注意的问题是 preHandler先被调用,那么postHandle将会
         * 后被调用
         */
        public void postHandle(HttpServletRequest req, HttpServletResponse resp,
                Object handler, ModelAndView mv) throws Exception {
            System.out.println("post-----");
        }
        /**
         * preHandler返回true才会执行
         * 在视图解析器执行后执行,视图被渲染后执行
         * 一般用于清理工作
         */
        public void afterCompletion(HttpServletRequest req,
                HttpServletResponse resp, Object handler, Exception exception)
                throws Exception {
            System.out.println("after completion");
        }
    
    }
  • 配置拦截器
    <!-- 拦截器配置 -->
        <mvc:interceptors>
            <mvc:interceptor>
                <!-- 配置映射路径 
                    /hello 表示/hello将会被MyInterceptor拦截
                    /*     表示根路径下的所有请求都会被拦截
                    /**    表示根路径及其子路径下的所有请求都会被拦截
                -->
                <mvc:mapping path="/hello"/>
                <!-- 配置拦截器 -->
                <bean class="cn.sxt.interceptor.MyInterceptor"></bean>
            </mvc:interceptor>
        </mvc:interceptors>
  • 测试即可。

4. 登陆拦截器的实现:

public class LoginInterceptor extends HandlerInterceptorAdapter{
    @Override
    public boolean preHandle(HttpServletRequest request,
            HttpServletResponse response, Object handler) throws Exception {
        
        //判断请求的是否是登录
        String url=request.getRequestURI();
        if(url.endsWith("toLogin")||url.endsWith("login")){
            return true;
        }
        //如果用户登录了
        if(request.getSession().getAttribute("currentUser")!=null){
            return true;
        }
        request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response);
        return false;
    }
}    
原文地址:https://www.cnblogs.com/forever2h/p/6805513.html