SpingBoot 过滤器和拦截器有什么区别?

1. 运行顺序不同(如图):

        过滤器是在 Servlet 容器接收到请求之后,但在 Servlet 被调用之前运行的;而拦截器则是在 Servlet 被调用之后,但在响应被发送到客户 端之前运行的。

2. 配置方式不同:

        因为过滤器是 Sevlet规范中一部分,任何java web工程都可以使用。因此在web.xml中配置 。 在Url-pattern中配置了/*后,可以对所有要访问的资源进行拦截。 拦截器是Spring MVC框架中的,只有使用Spring MVC框架的工程才能使用,在 Spring 的配置文件中 applicationContext下配置 或者使用注解进行配置。

3. Filter 依赖于 Servlet 容器,而 Interceptor 不依赖于 Servlet 容器。

4. Filter 在过滤是只能对 request 和 response 进行操作,而 interceptor 可以对 request、response、handler、modelAndView、exception 进行操作。

即: 拦截器只会拦截访问的控制器方法,如果访问的是Jsp/html/css/image/js是不会进行拦截的

这里主要强调一下应用场景的区分

拦截器:( 拦截器是AOP思想的具体应用 

  • 登录验证,判断用户是否登录。

  • 权限验证,判断用户是否有权限访问资源,如校验token

  • 日志记录,记录请求操作日志(用户ip,访问时间等),以便统计请求访问量。

  • 处理 cookie、本地化、国际化、主题等。

  • 性能监控,监控请求处理时长等。

  • 通用行为:读取 cookie得到用户信息并将用户对象放入请求,从而方便后续流程使用,还有如提取 Locale、Theme 信息等,只要是多个处理器都需要的即可使用拦截器实现)

过滤器:

  • 过滤敏感词汇(防止sql注入)
  • 设置字符编码
  • URL级别的权限访问控制
  • 压缩响应信息

你可能感兴趣的:(软考面试八股文,spring,boot,后端,java,spring,学习方法)