There are two ways to add filters in springboot:
1. By creating FilterRegistrationBean (it is recommended to use this method for unified management, and if the annotation method is not local debugging, if you need to add cookies in the filter, it may not be written to the front end)
2. By annotating @WebFilter
Create multiple filters and set the execution order by creating a FilterRegistrationBean:
1. Create two classes TestFilter1 and TestFilter2 that implement the Filter interface
package com.aoxun.core.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; public class TestFilter1 implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException {} @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { chain.doFilter(request, response); } @Override public void destroy() {} }
package com.aoxun.core.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; public class TestFilter2 implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException {} @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { chain.doFilter(request, response); } @Override public void destroy() {} }
2. Create a configuration class
If there are multiple filters, create multiple FilterRegistrationBeans. If you need to specify the execution order of the filters, you can configure it through registration.setOrder(FilterRegistrationBean.LOWEST_PRECEDENCE - 1). The larger the value, the later the execution order.
package com.aoxun.config.web; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import com.aoxun.core.filter.TestFilter1; import com.aoxun.core.filter.TestFilter2; /** * filter configuration * @author zcj * */ @Configuration public class FilterConfig2 { @Bean public FilterRegistrationBean companyUrlFilterRegister() { FilterRegistrationBean registration = new FilterRegistrationBean(); // Injection filter registration.setFilter( new TestFilter1()); // Intercept rules registration.addUrlPatterns("/*" ); // Filter name registration.setName("testFilter1" ) ; // Filter order registration.setOrder(FilterRegistrationBean.LOWEST_PRECEDENCE); return registration; } @Bean public FilterRegistrationBean outLinkSecurityFilterRegister() { FilterRegistrationBean registration = new FilterRegistrationBean(); // Injection filter registration.setFilter( new TestFilter2()); // Intercept rules registration.addUrlPatterns("/*" ); // Filter name registration.setName("testFilter2" ) ; // Filter order registration.setOrder(FilterRegistrationBean.LOWEST_PRECEDENCE - 1 ); return registration; } }
By annotating @WebFilter
1. Add the @ServletComponentScan annotation to the startup class to automatically scan packages with filter annotations
2. Use the combination of @WebFilter and @Order on the class to achieve
package com.aoxun.core.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebFilter; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.core.annotation.Order; @WebFilter(filterName="testFilter1",urlPatterns= {"/*"}) @Order(FilterRegistrationBean.LOWEST_PRECEDENCE) public class TestFilter1 implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { // TODO Auto-generated method stub } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { chain.doFilter(request, response); } @Override public void destroy() { // TODO Auto-generated method stub } }