You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot中RequestRejectedException异常:如何配置Spring Security解决?

Spring Boot应用RequestRejectedException错误解决

问题描述

我的Spring Boot应用抛出如下错误:

org.springframework.security.web.firewall.RequestRejectedException: The request was rejected because the header value "Mozilla/5.0 (Windows NT 10.0; ГўВЂВ¦) Gecko/20100101 Firefox/73.0" is not allowed.
    at org.springframework.security.web.firewall.StrictHttpFirewall$StrictFirewalledRequest.validateAllowedHeaderValue(StrictHttpFirewall.java:833) ~[spring-security-web-6.0.3.jar!/:6.0.3]
    at org.springframework.security.web.firewall.StrictHttpFirewall$StrictFirewalledRequest.getHeader(StrictHttpFirewall.java:716) ~[spring-security-web-6.0.3.jar!/:6.0.3]
    at jakarta.servlet.http.HttpServletRequestWrapper.getHeader(HttpServletRequestWrapper.java:82) ~[tomcat-embed-core-10.1.8.jar!/:na]
    at jakarta.servlet.http.HttpServletRequestWrapper.getHeader(HttpServletRequestWrapper.java:82) ~[tomcat-embed-core-10.1.8.jar!/:na]
    at jakarta.servlet.http.HttpServletRequestWrapper.getHeader(HttpServletRequestWrapper.java:82) ~[tomcat-embed-core-10.1.8.jar!/:na]
    at jakarta.servlet.http.HttpServletRequestWrapper.getHeader(HttpServletRequestWrapper.java:82) ~[tomcat-embed-core-10.1.8.jar!/:na]

该错误由Spring Security的StrictHttpFirewall组件触发,默认规则拒绝了包含特殊编码字符的请求头(如示例中的User-Agent头)。

解决方法

通过自定义StrictHttpFirewall的规则,放宽对请求头的限制:

  • 创建Spring Security配置类,覆盖默认的HttpFirewall实例:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.web.firewall.HttpFirewall;
import org.springframework.security.web.firewall.StrictHttpFirewall;

@Configuration
public class SecurityConfig {

    @Bean
    public HttpFirewall allowSpecialCharactersHttpFirewall() {
        StrictHttpFirewall firewall = new StrictHttpFirewall();
        // 允许所有请求头值(可根据实际需求替换为更严格的校验逻辑)
        firewall.setAllowedHeaderValues(header -> true);
        // 若有需要,还可放宽URL编码字符限制(示例)
        // firewall.setAllowedUrlEncodedCharacters(StandardCharsets.UTF_8.displayName());
        return firewall;
    }
}
  • 若需更精细的安全控制,避免完全放行所有请求头,可自定义正则表达式校验合法内容,例如针对User-Agent头的常见字符:
// 允许包含字母、数字及常见符号的请求头值
firewall.setAllowedHeaderValues(header -> 
    header.matches("^[a-zA-Z0-9()\\[\\]/.,;\\s:=-]+$")
);
  • 注意事项:放宽防火墙规则会降低应用的安全防护等级,建议仅针对业务必需的请求头或字符放行,避免引入潜在安全风险。

内容的提问来源于stack exchange,提问作者alexanoid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 03:10:25