升级Spring Boot 3.4.4后actuator/health接口401访问拒绝排查
Spring Boot 3.4.4升级后Actuator Health接口401问题排查
问题描述
将Spring Boot应用升级至3.4.4版本后,其余REST接口运行正常,但actuator/health接口返回401访问拒绝。已尝试通过自定义SecurityFilterChain放行该端点,但问题未解决。
可能的原因及解决方法
1. 端点路径匹配错误(最可能)
你的自定义SecurityFilterChain中使用了securityMatcher("/nes/actuator/health"),但Spring Boot Actuator端点默认不继承应用的server.servlet.context-path:
- 若未配置
management.server.servlet.context-path,health接口的实际路径是/actuator/health,而非/nes/actuator/health - 请求会跳过第一个
SecurityFilterChain(路径不匹配),进入第二个要求所有请求必须认证的FilterChain,导致401
解决方法:
修改第一个SecurityFilterChain的路径匹配规则:
@Bean @Order(1) public SecurityFilterChain actuatorEndpoints(HttpSecurity http) throws Exception { http .securityMatcher("/actuator/health") // 修改为实际路径 .authorizeHttpRequests(auth -> auth.anyRequest().permitAll()) .csrf(AbstractHttpConfigurer::disable); return http.build(); }
或者配置Actuator继承应用上下文路径,在application.yaml中添加:
management: server: servlet: context-path: ${nes.server.context-path:/nes}
2. Actuator自身安全配置优先级更高
Spring Boot Actuator自带安全自动配置(ManagementWebSecurityAutoConfiguration),其优先级可能高于自定义SecurityFilterChain,导致你的放行规则被覆盖。
解决方法:
在application.yaml中直接关闭Health端点的安全校验:
management: endpoint: health: security: enabled: false
3. SecurityFilterChain匹配顺序或规则问题
虽然你给第一个FilterChain设置了@Order(1),但需确保路径匹配规则正确:
- 避免精确匹配遗漏斜杠后缀(如
/actuator/health/),可改用通配符:securityMatcher("/actuator/health/**") - 也可显式使用
AntPathRequestMatcher确保匹配准确:
.securityMatcher(new AntPathRequestMatcher("/actuator/health"))
4. 配置文件中重复的Security节点
你的application.yaml中存在两个顶级security节点,虽通常不会直接影响,但建议将AWS相关配置移入spring:节点下,避免配置解析异常:
spring: security: oauth2: resourceserver: jwt: issuer-uri: ${nes.security.oauth2.resourceserver.jwt.issuer-uri} aws: region: ${nes.security.aws.region}
内容的提问来源于stack exchange,提问作者MOHAMMAD WASEEM
相关产品推荐
相关产品推荐

