springboot用过滤器打印请求和响应
时间: 2023-09-04 07:01:56 浏览: 64
Spring Boot提供了一种简单的方式来使用过滤器来打印请求和响应信息。
首先,我们需要创建一个实现了javax.servlet.Filter接口的过滤器类。可以在该类的doFilter方法中实现日志输出的逻辑。
```java
public class LoggingFilter implements Filter {
private static final Logger LOGGER = LoggerFactory.getLogger(LoggingFilter.class);
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
throws IOException, ServletException {
// 打印请求信息
HttpServletRequest request = (HttpServletRequest) servletRequest;
LOGGER.info("Request: {} {} {}", request.getMethod(), request.getRequestURI(), request.getProtocol());
// 打印响应信息
ContentCachingResponseWrapper responseWrapper = new ContentCachingResponseWrapper((HttpServletResponse) servletResponse);
filterChain.doFilter(servletRequest, responseWrapper);
byte[] responseContent = responseWrapper.getContentAsByteArray();
LOGGER.info("Response: {}", new String(responseContent, responseWrapper.getCharacterEncoding()));
// 将响应内容写回
responseWrapper.copyBodyToResponse();
}
// 其他方法
}
```
接下来,我们需要在Spring Boot应用程序的配置类中注册该过滤器,使其生效。
```java
@Configuration
public class WebConfig {
@Bean
public FilterRegistrationBean<LoggingFilter> loggingFilterRegistrationBean() {
FilterRegistrationBean<LoggingFilter> registrationBean = new FilterRegistrationBean<>();
registrationBean.setFilter(new LoggingFilter());
registrationBean.setOrder(Ordered.HIGHEST_PRECEDENCE);
registrationBean.addUrlPatterns("/*");
return registrationBean;
}
}
```
在上述代码中,我们通过`FilterRegistrationBean`来注册过滤器,并指定其优先级为最高。通过`addUrlPatterns`方法,我们可以指定过滤器要拦截的URL模式。
使用上述的过滤器配置后,每当有请求进入时,过滤器会拦截并打印请求信息;当响应返回时,过滤器也会打印相应的响应信息。这样可以方便地跟踪和调试请求和响应的过程。