前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring 拦截器

Spring 拦截器

作者头像
用户2146693
发布2019-08-08 11:22:43
8320
发布2019-08-08 11:22:43
举报
文章被收录于专栏:架构师进阶架构师进阶

什么是拦截器

一般指的是在浏览器页面向服务端发出请求后,拦截请求,对请求进行一系列的操作;或者在服务器返回数据时,在数据到达浏览器界面前,做一些操作,来完成功能的增强。

使用场景:解决请求的共性问题,如:乱码问题、权限验证问题等

实现

1. 编写拦截器类实现HandlerIntercepto接口

代码语言:javascript
复制
public class TestInterceptor implements HandlerInterceptor {
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        return false;
    }
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    }
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    }
}

2. 将拦截器注册进SpringMVC框架中

命名空间

代码语言:javascript
复制
xmlns:mvc="http://www.springframework.org/schema/mvc"
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
代码语言:javascript
复制
<!--注册拦截器-->
<mvc:interceptors>
    <!--注册-->
    <bean class="com.imooc.test.interceptor.TestInterceptor"></bean>
</mvc:interceptors>

3. 配置拦截器的拦截规则

代码语言:javascript
复制
<!--注册拦截器-->
<mvc:interceptors>
  <mvc:interceptor>
    <!--匹配规则-->
    <mvc:mapping path="/viewAll.form"/>
    <!--注册-->
    <bean class="com.imooc.test.interceptor.TestInterceptor"></bean>
  </mvc:interceptor>
</mvc:interceptors>

其他实现方式

这里写图片描述
这里写图片描述
代码语言:javascript
复制
public class TestInterceptor2 implements WebRequestInterceptor {
    //没有返回值,不能终止请求
    public void preHandle(WebRequest webRequest) throws Exception {

    }
    public void postHandle(WebRequest webRequest, ModelMap modelMap) throws Exception {
    }
    public void afterCompletion(WebRequest webRequest, Exception e) throws Exception {
    }
}

三个方法

1. preHandler方法

在请求被处理之前调用。是否需要将当前的请求拦截下来,返回true请求继续运行,返回false请求终止(包括action层也会终止),Object arg代表被拦截的请求的目标对象。

这里写图片描述
这里写图片描述

2. postHandler方法

在请求被处理之后调用

这里写图片描述
这里写图片描述

3. afterCompletion方法

在请求处理结束后调用,用作资源销毁,方法不常用。

这里写图片描述
这里写图片描述

多拦截器协同工作流程

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

过滤器与拦截器

区别

  1. 拦截器是基于java的反射机制的,而过滤器是基于函数回调。
  2. 拦截器依赖于框架容器,过滤器依赖与Servlet容器。
  3. 拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
  4. 拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。
  5. 在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。
  6. 拦截器可以获取IOC容器中的各个bean,而过滤器就不行,这点很重要,在拦截器里注入一个service,可以调用业务逻辑

Filter解决编码问题

这里写图片描述
这里写图片描述

拦截器解决编码、权限问题

这里写图片描述
这里写图片描述
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是拦截器
  • 实现
    • 1. 编写拦截器类实现HandlerIntercepto接口
      • 2. 将拦截器注册进SpringMVC框架中
        • 3. 配置拦截器的拦截规则
          • 其他实现方式
            • 三个方法
              • 1. preHandler方法
              • 2. postHandler方法
              • 3. afterCompletion方法
          • 多拦截器协同工作流程
          • 过滤器与拦截器
            • 区别
              • Filter解决编码问题
                • 拦截器解决编码、权限问题
                相关产品与服务
                容器服务
                腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档