Spring Security过滤器异常:已配置认证URL仍遭403拦截
已配置Spring Security过滤器,指定对POST请求路径/RemoteHandlerServices/Handle进行认证访问,但所有请求仍被拦截返回403错误。结合提供的代码与配置,可能的原因如下:
1. 路径匹配规则触发拦截
Spring Security的请求匹配遵循从上到下匹配、匹配即停止的逻辑。若实际请求路径与配置的/RemoteHandlerServices/Handle存在差异(比如大小写不一致、多/少斜杠、带额外参数),会触发后续antMatchers("/**").denyAll()规则,直接返回403。
2. JWT权限解析失败
使用的TokenAuthenticationConverter是SAP XSUAA专属转换器,setLocalScopeAsAuthorities(true)会将JWT中的本地scope转换为权限。若JWT中缺少对应scope字段,或转换器未正确解析出有效权限,会出现认证通过但授权失败的情况,返回403。
3. 目标Profile未激活
配置文件中spring.config.activate.on-profile: xsuaa指定仅在xsuaa Profile激活时生效。若当前运行环境未激活该Profile,XSUAA相关认证配置不会加载,JWT验证逻辑失效,请求无法通过认证。
4. Content-Security-Policy(CSP)限制
配置了http.headers().contentSecurityPolicy(CONTENT_SECURITY_POLICY),若CSP规则过于严格(比如限制请求方法、来源或请求头),可能间接导致请求被拦截,返回403。
5. 过滤器链优先级冲突
当前FilterChain标注了@Order(1),若存在其他优先级更高(Order值更小)的SecurityFilterChain,会优先处理请求,导致当前配置规则不生效。
6. XSUAA核心配置缺失
虽然开启了cds.security.xsuaa.enabled: true,但如果缺少XSUAA客户端ID、令牌端点等核心配置,JWT的签名验证、权限解析会失败,直接触发403。
排查建议
- 确认当前运行环境是否激活
xsuaaProfile,可通过日志或环境变量spring.profiles.active查看。 - 打印请求携带的JWT内容,检查
scope等字段是否符合转换器解析要求。 - 开启Spring Security调试日志(
logging.level.org.springframework.security=DEBUG),查看请求匹配的过滤器链、认证/授权详细流程,定位是认证失败还是授权失败。 - 验证请求路径与配置的
/RemoteHandlerServices/Handle完全一致,包括大小写、斜杠等细节。 - 临时注释CSP配置,排查是否是CSP规则导致的拦截。
- 检查项目中是否存在其他SecurityFilterChain,确认其Order值是否高于当前配置。
内容的提问来源于stack exchange,提问作者PDS

