springboot中filter的用法详解

 更新时间:2017年11月27日 10:36:05   作者:小宝不乖  
本篇文章主要介绍了springboot中filter的用法详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

一、在spring的应用中我们存在两种过滤的用法,一种是拦截器、另外一种当然是过滤器。我们这里介绍过滤器在springboot的用法,在springmvc中的用法基本上一样,只是配置上面有点区别。

二、filter功能,它使用户可以改变一个 request和修改一个response. Filter 不是一个servlet,它不能产生一个response,它能够在一个request到达servlet之前预处理request,也可以在离开 servlet时处理response.换种说法,filter其实是一个”servlet chaining”(servlet 链).

一个Filter包括:

1)、在servlet被调用之前截获;
2)、在servlet被调用之前检查servlet request;
3)、根据需要修改request头和request数据;
4)、根据需要修改response头和response数据;
5)、在servlet被调用之后截获.

1、Filter的应用场景

通过对filter过滤器的了解,可以得知在以下三种情况下可以做些处理:

1> 通过控制对chain.doFilter的方法的调用,来决定是否需要访问目标资源。

比如,可以在用户权限验证等等。判断用户是否有访问某些资源的权限,有权限放行,没权限不执行chain.doFilter方法。

2> 通过在调用chain.doFilter方法之前,做些处理来达到某些目的。

比如,解决中文乱码的问题等等。可以在doFilter方法前,执行设置请求编码与响应的编码。甚至可以对request接口进行封装装饰来处理get请求方式的中文乱码问题(重写相应的request.getParameter方法)。

3> 通过在调用chain.doFilter方法之后,做些处理来达到某些目的。

比如对整个web网站进行压缩。在调用chain.doFilter方法之前用类A对response对象进行封装装饰,重写getOutputStream和重写getWriter方法。在类A内部中,将输出内容缓存进ByteArrayOutputStream流中,然后在chain.doFilter方法执行后,获取类A中ByteArrayOutputStream流缓存数据,用GZIPOutputStream流进行压缩下。

2、Filter实现拦截的原理

Filter接口中有一个doFilter方法,当开发人员编写好Filter类实现doFilter方法,并配置对哪个web资源进行拦截后,WEB服务器每次在调用web资源的service方法之前(服务器内部对资源的访问机制决定的),都会先调用一下filter的doFilter方法。

3、过滤规则

 //过滤应用程序中所有资源,当前应用程序根下的所有文件包括多级子目录下的所有文件,注意这里*前有“/”
 registration.addUrlPatterns("/*");
 //过滤指定的类型文件资源, 当前应用程序根目录下的所有html文件,注意:*.html前没有“/”,否则错误
 registration.addUrlPatterns(".html");
 //过滤指定的目录下的所有文件,当前应用程序根目录下的folder_name子目录(可以是多级子目录)下所有文件
 registration.addUrlPatterns("/folder_name/*");
 //过滤指定文件
 registration.addUrlPatterns("/index.html");

三、应用

@Component
@ServletComponentScan
@WebFilter(urlPatterns = "/login/*",filterName = "loginFilter")
public class LoginFilter implements Filter{

  @Override
  public void init(FilterConfig filterConfig) throws ServletException {

  }

  @Override
  public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

  }

  @Override
  public void destroy() {

  }
}

四、解释:

1、@Component 这个注解的目的是将LoginFilter交给容器来处理。也就是让LoginFilter起作用

2、@ServletComponentScan 这个使用来扫描@WebFilter 的让@WebFilter起作用。当然对于servlet线管注解也是可以的。这个@ServletComponentScan最好卸载Apllication这个上面,通用配置。我这里因为只有一个Filter所以没有写在Application上面。

3、@WebFilter 这个用处显而易见,针对于什么链接做过滤,filter的名称是为什么。

五、简单介绍一下springmvc中的Filter的用法

1、写的方法还是一样的都是继承Filter,来实现3个方法处理

2、丢入容器:这个需要配置在web.xml里面

  <filter>
    <filter-name>loginFilter</filter-name>
    <filter-class>com.troy.boot.filter.LoginFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>loginFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

3、具体的用法可以自己研究。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 在java poi导入Excel通用工具类示例详解

    在java poi导入Excel通用工具类示例详解

    这篇文章主要给大家介绍了关于在java poi导入Excel通用工具类的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-09-09
  • Spring Boot实战之发送邮件示例代码

    Spring Boot实战之发送邮件示例代码

    本篇文章主要介绍了Spring Boot实战之发送邮件示例代码,具有一定的参考价值,有兴趣的可以了解一下。
    2017-03-03
  • Java OpenCV4.0.0实现实时人脸识别

    Java OpenCV4.0.0实现实时人脸识别

    这篇文章主要为大家详细介绍了Java OpenCV4.0.0实现实时人脸识别,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07
  • SpringBoot应用启动内置Tomcat的过程源码分析

    SpringBoot应用启动内置Tomcat的过程源码分析

    这篇文章主要介绍了SpringBoot应用启动内置Tomcat的过程分析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-07-07
  • java反射调用方法NoSuchMethodException的解决方案

    java反射调用方法NoSuchMethodException的解决方案

    这篇文章主要介绍了java反射调用方法NoSuchMethodException的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • Spring Security 控制授权的方法

    Spring Security 控制授权的方法

    本篇文章主要介绍了Spring Security 控制授权的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • logback自定义json日志输出示例详解

    logback自定义json日志输出示例详解

    这篇文章主要为大家介绍了logback自定义json日志输出,就是通过logback日志体系以及logstash提供的json log依赖将数据以json格式记录到日志文件的例子
    2022-03-03
  • Springboot vue导出功能实现代码

    Springboot vue导出功能实现代码

    这篇文章主要介绍了Springboot vue导出功能实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • spring boot容器启动流程

    spring boot容器启动流程

    spring cloud是基于spring boot快速搭建的,今天咱们就看看spring boot容器启动流程,需要的朋友跟随脚本之家小编一起学习吧
    2018-01-01
  • 使用@value注解取不到application.xml配置文件中的值问题

    使用@value注解取不到application.xml配置文件中的值问题

    这篇文章主要介绍了使用@value注解取不到application.xml配置文件中的值问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03

最新评论