覆盖弹簧安全执行器而不会丢失可配置的端点

时间:2015-11-04 14:58:41

标签: spring-security spring-boot spring-boot-actuator

我试图保护Actuators项目中的端点Spring Boot。但是,使用Spring Security的准备运行Actuators配置:

management:
  security:
    enabled: true
    role: ADMINISTRATOR

太简单了我需要使用我们的自定义安全性{Actuators SSO)插入CAS

首先尝试为context-path添加Actuators

management:
  security:
    enabled: true
    role: ADMINISTRATOR
  context-path: /management

并更新我的WebSecurityConfigurerAdapter配置

@Override
protected void configure(HttpSecurity http) throws Exception {
    ...
    http.authorizeRequests()..antMatchers("/management/**").hasRole(Role.ADMINISTRATOR.toString());
    ...
} 

虽然有效,但我必须对Actuators context-path进行硬编码,因此当我想要更新management.context-path时,我必须更新我的安全性。

我知道可以检索management.context-path的值,但是当值等于""时如何管理它?

您可以回答我@Autowired EndpointHandlerMapping并检索Actuators个端点的列表...最后,我将复制过去与ManagementSecurityAutoConfiguration.ManagementWebSecurityConfigurerAdapter相同的逻辑。

此外ManagementSecurityAutoConfiguration.ManagementWebSecurityConfigurerAdapter @ConditionalOnMissingBean指向自身但ManagementSecurityAutoConfiguration.ManagementWebSecurityConfigurerAdapter是内部静态受保护的类,因此无法在不传递参数management.security.enabled=false的情况下禁用它,这可能很奇怪,因为您的配置说management.security.enabled=false但实际上端点是安全的......

结论

  1. 是否有办法覆盖(只是部分)正确Actuators安全
  2. 我可能会错过一些我完全错了吗?

1 个答案:

答案 0 :(得分:1)

Github上已有待处理的问题。目前Dave Syer proposes

  

我认为那里所有代码的复制粘贴实际上是最好的   现在的解决方案(并设置management.security.enabled = false让   引导知道你想自己做。)

我还没有测试是否会抛出运行时异常,但我认为您可以重用NSLog(@"testObject2: %@", testObject2); 并保存大量的复制粘贴操作。至少编译器没有抱怨。

将您的配置类放在项目中的包ManagementWebSecurityConfigurerAdapter下,并从org.springframework.boot.actuate.autoconfigure扩展。不要错过ManagementWebSecurityAutoConfiguration.ManagementWebSecurityConfigurerAdapter的所有注释。这是唯一的复制粘贴操作,因为类注释不能由子类继承。

ManagementWebSecurityConfigurerAdapter

请勿忘记package org.springframework.boot.actuate.autoconfigure; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Configuration; import org.springframework.core.annotation.Order; @Configuration @ConditionalOnProperty(prefix = "management.security", name = "enabled", matchIfMissing = true) @Order(ManagementServerProperties.BASIC_AUTH_ORDER) public class SsoManagementWebSecurityConfigurerAdapter extends ManagementWebSecurityAutoConfiguration.ManagementWebSecurityConfigurerAdapter { //TODO your SSO configuration } @Import的配置。