Spring 引导执行器 - 无法禁用 /info 端点
Spring Boot Actuator - Cannot disable /info endpoint
我尝试在 application.yml
配置文件中禁用生产环境的所有执行器端点:
endpoints.enabled: false
它适用于除 /info 之外的所有端点。
如何关闭给定环境的所有端点?
更新:
我正在做的项目也是 Eureka 客户端。
在 Spring Cloud Netflix 的文档中,在 状态页面和健康指标 (http://cloud.spring.io/spring-cloud-netflix/spring-cloud-netflix.html) 部分,它说 "Eureka instance default to "/info" 和 "/health"分别”。
是否有禁用这些端点的解决方案?
我能够使用 endpoints.enabled: false
禁用 /health 端点,但不能禁用 /info 端点。
我觉得你的示例配置很可疑。我猜你的意思是
endpoints:
enabled: true
无论如何,我只是试图将它添加到普通 Spring 引导应用程序(使用 1.3.1
并且所有端点都被禁用(如预期的那样)。
终于解决了我的问题。我在执行器中只启用了 /info 和 /health 端点。为了只允许具有 ADMIN 角色的用户访问 /info 端点,我需要混合执行器管理安全和 spring 安全配置。
所以我的 application.yml 看起来像这样:
endpoints.enabled: false
endpoints:
info.enabled: true
health.enabled: true
management.security.role: ADMIN
和 spring 这样的安全配置(我需要更改 ManagementSecurityConfig 的顺序以获得更高的优先级):
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfiguration {
@Configuration
protected static class AuthenticationSecurity extends GlobalAuthenticationConfigurerAdapter {
@Autowired
private AuthenticationProvider authenticationProvider;
public AuthenticationSecurity() {
super();
}
@Override
public void init(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication().withUser("admin").password("secret").roles("ADMIN");
}
}
@Configuration
@Order(Ordered.HIGHEST_PRECEDENCE + 2)
public static class ManagementSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.requestMatchers()
.antMatchers("/info/**")
.and()
.authorizeRequests()
.anyRequest().hasRole("ADMIN")
.and()
.httpBasic();
}
}
@Configuration
public static class ApiWebSecurityConfigurationAdapter extends WebSecurityConfigurerAdapter {
protected void configure(HttpSecurity http) throws Exception {
// API security configuration
}
}
}
我尝试在 application.yml
配置文件中禁用生产环境的所有执行器端点:
endpoints.enabled: false
它适用于除 /info 之外的所有端点。 如何关闭给定环境的所有端点?
更新:
我正在做的项目也是 Eureka 客户端。 在 Spring Cloud Netflix 的文档中,在 状态页面和健康指标 (http://cloud.spring.io/spring-cloud-netflix/spring-cloud-netflix.html) 部分,它说 "Eureka instance default to "/info" 和 "/health"分别”。
是否有禁用这些端点的解决方案?
我能够使用 endpoints.enabled: false
禁用 /health 端点,但不能禁用 /info 端点。
我觉得你的示例配置很可疑。我猜你的意思是
endpoints:
enabled: true
无论如何,我只是试图将它添加到普通 Spring 引导应用程序(使用 1.3.1
并且所有端点都被禁用(如预期的那样)。
终于解决了我的问题。我在执行器中只启用了 /info 和 /health 端点。为了只允许具有 ADMIN 角色的用户访问 /info 端点,我需要混合执行器管理安全和 spring 安全配置。
所以我的 application.yml 看起来像这样:
endpoints.enabled: false
endpoints:
info.enabled: true
health.enabled: true
management.security.role: ADMIN
和 spring 这样的安全配置(我需要更改 ManagementSecurityConfig 的顺序以获得更高的优先级):
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfiguration {
@Configuration
protected static class AuthenticationSecurity extends GlobalAuthenticationConfigurerAdapter {
@Autowired
private AuthenticationProvider authenticationProvider;
public AuthenticationSecurity() {
super();
}
@Override
public void init(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication().withUser("admin").password("secret").roles("ADMIN");
}
}
@Configuration
@Order(Ordered.HIGHEST_PRECEDENCE + 2)
public static class ManagementSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.requestMatchers()
.antMatchers("/info/**")
.and()
.authorizeRequests()
.anyRequest().hasRole("ADMIN")
.and()
.httpBasic();
}
}
@Configuration
public static class ApiWebSecurityConfigurationAdapter extends WebSecurityConfigurerAdapter {
protected void configure(HttpSecurity http) throws Exception {
// API security configuration
}
}
}