一、传统javaEE增加Filter是在web.xml中配置,然而spring-boot中很明显不能这样实现;
<filter>
<filter-name>TestFilter</filter-name>
<filter-class>com.cppba.filter.TestFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>TestFilter</filter-name>
<url-pattern>/*</url-pattern>
<init-param>
<param-name>paramName</param-name>
<param-value>paramValue</param-value>
</init-param>
</filter-mapping>
二、 继承 spring 过滤器 OncePerRequestFilter 实现自定义过滤器
@Slf4j
public abstract class BaseLogRequestFilter extends OncePerRequestFilter implements Ordered {
@Override
public int getOrder() {
return Ordered.LOWEST_PRECEDENCE - 16;
}
@Override
protected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, FilterChain filterChain) throws ServletException, IOException {
try {
if (debug) {
log.debug("logRequestDebug {}",xxx);
}else if (httpServletResponse.getStatus() >=HttpStatus.INTERNAL_SERVER_ERROR.value()) {
log.error("logRequestStatus5xx {}", objectMapper.writeValueAsString(RequestDTO.build(httpServletRequest, httpServletResponse, duration, requestPayload, responsePayload)));
}
} finally {
MDC.remove(REQUEST_ID_HEADER);
}
}
三、实现Filter 加上@WebFilter
```java
@Order(1)
//重点
@WebFilter(filterName = "testFilter1", urlPatterns = "/*")
public class TestFilterFirst implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
throws IOException, ServletException {
System.out.println("TestFilter1");
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
}
}
在spring-boot的入口处加上如下注解@ServletComponentScan
@SpringBootApplication(scanBasePackages = "com.cppba")
//重点
@ServletComponentScan
public class Application {
public static void main(String[] args) throws UnknownHostException {
SpringApplication app = new SpringApplication(Application.class);
Environment environment = app.run(args).getEnvironment();
}
}