Spring mvc 中的拦截器知识点

15 篇文章 0 订阅
8 篇文章 0 订阅

什么是拦截器?

有时候有些网站只给特定的人群登陆浏览,这时候就需要使用拦截器,
拦截器与js的过滤器Filter类似,它主要用于拦截用户的请求并做出相应的处理,通常用在限权登陆验证记录请求信息的日志判断用户是否登陆等功能。

三种方法

perHandle方法(重点)

该方法在控制器处理请求方法前执行,返回true继续执行,false中断后续操作。类似下面简单的登陆拦截:

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
   throws Exception {
  
  // 获取请求的URL
  String url = request.getRequestURI();
  //login.jsp或登陆请求放行,不拦截
  if(url.indexOf("/toLogin")>=0||url.indexOf("/login")>=0) {
   return true;
  }
  //获取session
   HttpSession session = request.getSession();
   Object obj = session.getAttribute("user");
   if(obj!=null) {
    return true;
   }
   //没有登陆且不是登陆页面,转发到登陆页面,并给出提示信息
   request.setAttribute("msg", "还没有登陆,请登录!");
   request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response);//?
   return false;
 }

postHandle方法

该方法在控制器的处理请求方法调用之后执行,在解析视图之前执行,一般用来对请求域中的模型视图进行进一步修改
例如

public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
   ModelAndView modelAndView) throws Exception {
  System.out.println("postHandle方法在控制器处理请求方法后,解析视图之前执行");//模拟修改
 }

afterCompletion方法

该方法在控制器处理请求方法执行完成后执行,一般用来实现资源清理记录日志信息等工作。

public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
   throws Exception {
  // TODO Auto-generated method stub
  System.out.println("afterCompletion方法在控制器处理请求方法完成之后,即视图渲染完成之后执行");//模拟操作
 }

拦截器的配置

配置文件如下:

<mvc:interceptors>
  <!-- 配置拦截器作用的路径 -->
  <mvc:interceptor>
   <mvc:mapping path="/**"/>
   <!-- 表示匹配的指定路径的请求才进行拦截 -->
   <bean class = "interceptor.LoginInterceptor"/> 
  </mvc:interceptor>
 </mvc:interceptors>

在这里注意几点:
1.interceptors元素的子元素必须按照mapping、exclude-mapping、bean的顺序配置。
2.path属性值为/**表示拦截所有路径,若为/gotoTest,则拦截以/gotoTest结尾的路径。
3.如果请求路径中包含不需要拦截的内容,可以通过exclude-mapping配置。

多个拦截器

的时候,preHandle按照配置的顺序执行,但是postHandle方法和afterCompletion方法按照配置顺序的逆序执行!

两个拦截器:

 <mvc:interceptors> 
  <!-- 配置拦截器作用的路径 -->
  <mvc:interceptor>
   <!-- 配置拦截器作用的路径 -->
   <mvc:mapping path="/**"/>
   <!-- 表示匹配的指定路径的请求才进行拦截 -->
   <bean class = "interceptor.Interceptor1"/>
  </mvc:interceptor>
  <mvc:interceptor>
   <!-- 匹配拦截器作用的路径 -->
   <mvc:mapping path="/gotoTest"/>
   <!-- 表示匹配的指定路径的请求才进行拦截 -->
   <bean class = "interceptor.Interceptor2"/>
  </mvc:interceptor>
 </mvc:interceptors>

如有疑问请留言…

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值