在springboot添加过滤器有两种方式:前端
一、经过建立FilterRegistrationBean的方式(建议使用此种方式,统一管理,且经过注解的方式若不是本地调试,若是在filter中须要增长cookie可能会存在写不进前端状况)java
二、经过注解@WebFilter的方式web
经过建立FilterRegistrationBean的方式建立多个filter以及设置执行顺序:spring
一、建立两个实现Filter接口的类TestFilter1 、TestFilter2springboot
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() {} }
二、建立配置类cookie
有多个filter就建立多个FilterRegistrationBean ,若需注明filter的执行顺序,可经过registration.setOrder(FilterRegistrationBean.LOWEST_PRECEDENCE - 1)配置,值越大,执行顺序越靠后ide
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配置 * @author zcj * */ @Configuration public class FilterConfig2 { @Bean public FilterRegistrationBean companyUrlFilterRegister() { FilterRegistrationBean registration = new FilterRegistrationBean(); //注入过滤器 registration.setFilter(new TestFilter1()); //拦截规则 registration.addUrlPatterns("/*"); //过滤器名称 registration.setName("testFilter1"); //过滤器顺序 registration.setOrder(FilterRegistrationBean.LOWEST_PRECEDENCE); return registration; } @Bean public FilterRegistrationBean outLinkSecurityFilterRegister() { FilterRegistrationBean registration = new FilterRegistrationBean(); //注入过滤器 registration.setFilter(new TestFilter2()); //拦截规则 registration.addUrlPatterns("/*"); //过滤器名称 registration.setName("testFilter2"); //过滤器顺序 registration.setOrder(FilterRegistrationBean.LOWEST_PRECEDENCE - 1); return registration; } }
经过注解@WebFilter的方式url
一、在启动类上增长@ServletComponentScan注解,自动扫描带有过滤器注解的包spa
二、在类上使用@WebFilter和@Order组合实现调试
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 } }