目录
一、使用@WebFilter+@ServletComponentScan
具体步骤:
1.新建过滤器类实现Filter,重写doFilter方法
2.在启动类上加@ServletComponentScan注解
注意事项:
二、采用配置类配置过滤器,使用注解@Configuration和@Bean
具体步骤:
1.创建过滤器实现Filter类,重写doFilter方法
2.写一个配置类,在上面加上注解@Configuration
3.在配置类中写方法返回FilterRegistrationBean,并加注解@Bean
配置过滤器,使用FilterRegistrationBean中的方法
1.setFilter
2.setOrder
3.addUrlPatterns
4.setName
5.setUrlPatterns
一、使用@WebFilter+@ServletComponentScan
具体步骤:
1.新建过滤器类实现Filter,重写doFilter方法
例:跨域认证过滤器
1
2
3
4
5
6
7
8
9
10
11
12
13
14@WebFilter(filterName="filter01",urlPatterns={"*"}) public class CorsFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletResponse resp = (HttpServletResponse) response; resp.setHeader("Access-Control-Allow-Origin", "*");//允许访问的来源,如指定http://127.0.0.1:5500 resp.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");//允许通过的方法,options跨域请求方法 resp.setHeader("Access-Control-Max-Age", "3600");//指定本次预检请求的有效期,单位为秒,在此期间不用发出另一条预检请求。 resp.setHeader("Access-Control-Allow-Headers", "x-requested-with,content-type,jwt");//允许通过的请求头,可使用通配符* response.setHeader("Access-Control-Expose-Headers", "jwt");//使响应头可以被访问,暴露出来 chain.doFilter(request, response); } }
2.在启动类上加@ServletComponentScan注解
例:oaApplication
1
2
3
4
5
6
7
8@ServletComponentScan public class OaApplication { public static void main(String[] args) { SpringApplication.run(OaApplication.class, args); } }
注意事项:
1.filter执行顺序和类名字典顺序有关,指定@WebFilter注解属性filtername与@Order都无法改变执行顺序
2.如果只有一个过滤器,不用管其他配置,也可以使用@Component注解
二、采用配置类配置过滤器,使用注解@Configuration和@Bean
具体步骤:
1.创建过滤器实现Filter类,重写doFilter方法
和上面一样,但类上不加任何信息,例:新建一个权限过滤器
1
2
3
4public class AccessFilter implements Filter { @Autowired private AccessService accessService; }
2.写一个配置类,在上面加上注解@Configuration
3.在配置类中写方法返回FilterRegistrationBean,并加注解@Bean
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25@Configuration public class WebConfig { @Bean public FilterRegistrationBean corsFilter() { FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(); CorsFilter corsFilter = new CorsFilter();//无法在filter中注入bean filterRegistrationBean.setFilter(corsFilter); filterRegistrationBean.addUrlPatterns("*");//配置过滤规则 filterRegistrationBean.setOrder(Integer.MIN_VALUE);//执行次序 return filterRegistrationBean; } @Bean public FilterRegistrationBean accessFilter() { FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(); filterRegistrationBean.setFilter(getAccessFilter());//注入的bean不为null filterRegistrationBean.addUrlPatterns("*");//配置过滤规则 filterRegistrationBean.setOrder(1);//执行次序 return filterRegistrationBean; } @Bean public AccessFilter getAccessFilter(){ return new AccessFilter(); } }
配置过滤器,使用FilterRegistrationBean中的方法
1.setFilter
将建好的过滤器类对象传进去
指明需要被注册的过滤器,即是哪个过滤器的Bean
2.setOrder
设置过滤器执行次序
数字越小越先执行
为保证一定最先执行,可以使用Integer.MIN_VALUE
3.addUrlPatterns
配置过滤器规则
4.setName
设置过滤器名称
5.setUrlPatterns
配置多个过滤规则,参数List<String>
最后
以上就是感性白昼最近收集整理的关于SpringBoot项目中过滤器Filter的配置一、使用@WebFilter+@ServletComponentScan二、采用配置类配置过滤器,使用注解@Configuration和@Bean的全部内容,更多相关SpringBoot项目中过滤器Filter内容请搜索靠谱客的其他文章。
发表评论 取消回复