• 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
Copyright © 2020-2023  润新知