参考答案:
在 Spring Boot 中,默认情况下,Spring Boot Actuator
的一些端点(例如 /actuator/health
和 /actuator/metrics
)是受到安全控制的,尤其是在生产环境中。这是为了保护敏感的应用信息,防止未授权的访问。
如果希望禁用 Actuator 端点的安全性,或者在开发环境中简化访问,可以通过以下几种方式来配置。
如果你不想为 Actuator 端点启用任何安全限制,可以通过自定义安全配置禁用 Actuator 端点的安全性。
1import org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementWebSecurityAutoConfiguration; 2import org.springframework.context.annotation.Bean; 3import org.springframework.context.annotation.Configuration; 4import org.springframework.security.config.annotation.web.builders.HttpSecurity; 5import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; 6import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; 7 8@Configuration 9@EnableWebSecurity 10public class SecurityConfig extends WebSecurityConfigurerAdapter { 11 12 @Override 13 protected void configure(HttpSecurity http) throws Exception { 14 // 禁用 Actuator 端点的安全性 15 http 16 .authorizeRequests() 17 .antMatchers("/actuator/**").permitAll() // 允许所有人访问 Actuator 端点 18 .anyRequest().authenticated() 19 .and() 20 .csrf().disable(); // 如果需要,可以禁用 CSRF 保护 21 } 22}
你还可以配置哪些 Actuator 端点是暴露的,哪些是被保护的。默认情况下,Spring Boot Actuator
会暴露某些端点,且需要身份验证来访问这些端点。
通过 application.properties
或 application.yml
配置,控制端点的访问方式。例如,如果希望禁用端点的安全性,可以设置:
application.properties
:1# 暴露 actuator 的所有端点 2management.endpoints.web.exposure.include=* 3# 禁用对 actuator 端点的安全性限制 4management.endpoint.health.show-details=always 5management.endpoints.web.exposure.exclude=security,metrics
application.yml
:1management: 2 endpoints: 3 web: 4 exposure: 5 include: "*" # 暴露所有端点 6 exclude: security, metrics # 排除敏感的端点 7 endpoint: 8 health: 9 show-details: always # 健康检查显示详细信息
如果你不想使用任何 Spring Security 来保护端点,可以完全禁用 Spring Security 的配置,简单的做法是删除相关的安全配置类,或者通过以下方式禁用 Spring Security:
1# 在 application.properties 中禁用 Spring Security 2spring.security.enabled=false
如果只想禁用对特定 Actuator 端点的安全性控制,而不完全关闭 Spring Security,可以精细地调整哪些端点对外开放,哪些需要验证。
health
和 info
端点:1@Override 2protected void configure(HttpSecurity http) throws Exception { 3 http 4 .authorizeRequests() 5 .antMatchers("/actuator/health", "/actuator/info").permitAll() // 公开健康和信息端点 6 .anyRequest().authenticated(); // 其他端点需要认证 7}
最近更新时间:2024-12-11