如何配置Spring RequestDumperFilter使其不记录敏感请求头
关于Spring RequestDumperFilter敏感请求头过滤配置的解答
可以实现该需求,但原生RequestDumperFilter没有直接提供排除指定请求头的配置项,通常有两种可行方案:
方案1:自定义扩展RequestDumperFilter(推荐)
核心思路是继承原生过滤器重写请求头处理逻辑,过滤敏感信息后再输出:
- 首先定义自定义过滤器类,示例代码:
import org.springframework.web.filter.RequestDumperFilter; import javax.servlet.http.HttpServletRequest; import java.util.Collections; import java.util.Enumeration; import java.util.List; public class SensitiveRequestDumperFilter extends RequestDumperFilter { // 可按需添加其他敏感头 private static final List<String> SENSITIVE_HEADERS = List.of("Authorization", "Cookie", "Proxy-Authorization"); @Override protected Enumeration<String> getHeaderNames(HttpServletRequest request) { // 直接从输出列表中移除敏感头 return Collections.enumeration( Collections.list(super.getHeaderNames(request)) .stream() .filter(header -> !SENSITIVE_HEADERS.contains(header)) .toList() ); } // 如果希望保留头名、只隐藏值,也可以重写getHeader方法: // @Override // protected String getHeader(HttpServletRequest request, String header) { // if (SENSITIVE_HEADERS.contains(header)) { // return "[REDACTED]"; // } // return super.getHeader(request, header); // } }
- 随后将自定义过滤器注册到Spring容器,替换原生实现:
@Bean public FilterRegistrationBean<RequestDumperFilter> requestDumperFilter() { FilterRegistrationBean<RequestDumperFilter> registration = new FilterRegistrationBean<>(); registration.setFilter(new SensitiveRequestDumperFilter()); registration.addUrlPatterns("/*"); // 按需调整拦截路径 return registration; }
方案2:日志框架层脱敏
如果不想修改代码,也可以通过日志框架的替换规则直接脱敏输出内容,以Logback为例的配置示例:
<configuration> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern> %d{yyyy-MM-dd HH:mm:ss} %replace(%msg){'Authorization=[^,\s\]]+', 'Authorization=[REDACTED]'}%n </pattern> </encoder> </appender> </configuration>
注意:如果使用Spring Boot旧版本,需确认
RequestDumperFilter的方法签名是否和示例一致,部分低版本需调整重写的方法名。
内容的提问来源于stack exchange,提问作者Miron Ophir
相关产品推荐
相关产品推荐

