如何解决Spring Boot拦截器和过滤器对导致4XX代码的请求的调用
我使用afterCompletion拦截器记录请求以及响应代码:
public class Logger4XX extends HandlerInterceptorAdapter {
@Override
public void afterCompletion(HttpServletRequest request,HttpServletResponse response,Object handler,Exception ex) throws Exception {
int code = response.getStatus();
....
log request and response code here
....
}
}
要在那里启用阅读请求正文,我必须使用包装HttpServletRequest的过滤器:
@Component
public class RequestWrapperFilter implements Filter {
@Override
public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throws IOException,ServletException {
CachedHttpServletRequest wrapper = new CachedHttpServletRequest((HttpServletRequest) request);
chain.doFilter(wrapper,response);
}
}
对于成功的响应(2XX)来说效果很好,但是对于产生4XX代码的请求来说有点奇怪:
- 对于404响应,我看到了对afterCompletion的两次调用,第一个带有预期的包装请求(CachedHttpServletRequest),第二个带有HttpServletRequest的原始实现(org.apache.catalina.core.ApplicationHttpRequest)
- 对于406响应(错误的Accept标头),我看到了唯一的调用,但是HttpServletRequest未包装,因此请求正文不可用
是否有办法解决至少第二个问题,所以每个请求都被包装了?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。