拦截器

mvc配置文件

1.全部拦截

<!--            使用bean定义一个Interceptor -->
    <mvc:interceptors>
<!--    直接定义在根下面的Interceptor拦截所有请求-->
        <bean class="org.xxx.springmvc.interceptors.inter1"></bean>
    </mvc:interceptors>

2.常用写法

<!--    定义在 mvc:interceptor 下面 拦截所有test地址开头的请求-->
    <mvc:interceptors>
<!--        preHandle根据执行顺序拦截
            然后根据顺序的 post和after-->
        <mvc:interceptor>
<!--            mvc:mapping 配置拦截器拦截资源 支持通配符 /** -->
<!--            mvc:exclude-mapping 配置拦截器放行的资源 可以多个-->
            <mvc:mapping path="/test/*.do"/>
            <mvc:exclude-mapping path="/m01.do"/>
            <bean class="org.xxx.springmvc.interceptors.inter1"></bean>
        </mvc:interceptor>

        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <bean class="org.xxx.springmvc.interceptors.inter2"></bean>
        </mvc:interceptor>
    </mvc:interceptors>

实现方法

1.实现HandlerInterceptor接口

/**
 * SpringMVC中的Interceptor拦截器
 * 它的主要作用是拦截用户的请求并进行相应的处理。
 * 对于springmvC拦截器的定义方式有两种方式
 *  1.实现HandlerInterceptor接口类
 *
 */
public class inter1 implements HandlerInterceptor {

    //拦截器执行之前
    @Override
    public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
        System.out.println("pre");
        /**
         * true:继续执行
         * false:阻止
         */
        return true;
    }

    //拦截器Handler执行后 ,view生成前
    @Override
    public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
        System.out.println("post");
    }

    //view生成后
    @Override
    public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
        System.out.println("after");
    }
}

2.实现HandlerInterceptorAdapter接口

public class inter2 extends HandlerInterceptorAdapter {
    public inter2() {
        super();
    }

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        return super.preHandle(request, response, handler);
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        super.postHandle(request, response, handler, modelAndView);
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        super.afterCompletion(request, response, handler, ex);
    }

    @Override
    public void afterConcurrentHandlingStarted(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        super.afterConcurrentHandlingStarted(request, response, handler);
    }
}

应用

1.控制层

@Controller
public class UserController {

    @RequestMapping("user/login")
    public ModelAndView userLogin(HttpSession session){
        ModelAndView mv=new ModelAndView();
        System.out.println("user login");
        User user=new User();
        user.setId(10);
        user.setUserName("admin");
        session.setAttribute("userInfo",user);
        mv.setViewName("success");
        return mv;
    }

    @RequestMapping("user/regsiter")
    public ModelAndView userRegsier(){
        ModelAndView mv=new ModelAndView();
        mv.setViewName("success");
        return mv;
    }

    @RequestMapping("user/delete")
    public ModelAndView userDelete(){
        ModelAndView mv=new ModelAndView();
        mv.setViewName("success");
        return mv;
    }
}

2.interator层

@Override
 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
  /**
   * 获取session
   *  存在则放行
   */
  User user=(User) request.getSession().getAttribute("userInfo");
  if(user == null){
      response.sendRedirect(request.getContextPath()+"/login.jsp");
      return false;
  }
  return true;
}
posted @   lwx_R  阅读(43)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示