Filter 的使用和Spring boot 定义配置拦截器Interceptor很像,特别要注意点是过滤规则的书写
Spring boot Filter定义
public class MyFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
filterChain.doFilter(servletRequest, servletResponse);
}
}
SpringMVC 中是怎样,这里就怎样,区别在于配置文件。
Spring boot Filter配置
配置类代码建议如下写,避免出现 null 的情况。和它一样。
/**
* Created by guozhaohui628@gmail.com on 2019/1/7
* Description:
*/
@Configuration
public class MyFilterConfig {
@Bean
public MyFilter getMyFilter(){
return new MyFilter();
}
@Bean
public FilterRegistrationBean authFilterRegistrationBean() {
FilterRegistrationBean registrationBean = new FilterRegistrationBean();
registrationBean.setName("myFilter");
MyFilter myFilter = getMyFilter();
registrationBean.setFilter(myFilter);
registrationBean.setOrder(1);
List<String> urlList = new ArrayList<String>();
//1
//urlList.add("/*");
//2
// urlList.add("/query_equip_business_policy");
// urlList.add("/query_start_charge");
// urlList.add("/query_station_info");
// urlList.add("/query_station_status");
registrationBean.setUrlPatterns(urlList);
return registrationBean;
}
}
过滤规则如上有两种情况,首先第一种过滤所有地址。这样配置要注意,因为没看到 Spring boot 怎样处理静态资源。搜遍很多博客,都没提。搜索关键字 「spring boot filter 静态资源」
当过滤器和拦截器同时存在时,先通过 过滤器 在经过拦截器
此种情况下,如果项目是前后端分离,倒是无所谓。匹配到过滤规则后,通过在过滤器方法中判断想要放行的地址url即可。
还有种办法也就是如上第二种,一个个想要维护过滤的地址添加到集合中,静态资源不进行维护。
ok ,过滤器的书写就是纯粹 Java 知识,不涉及 Spring boot 留着下篇大餐总结出来,因为下篇关于 token 的代码就涉及到过滤器。
本文由老郭种树原创,转载请注明:https://guozh.net/2019spring-boot-guolvqifilterdedingyijipeizhi/