在不丢失可配置端点的情况下覆盖 spring 安全执行器
Overriding spring security actuator without loosing configurable endpoints
我正在尝试保护 Spring Boot
项目内的端点 Actuators
。然而,而不是使用 ready-to-运行 Spring Security
配置 Actuators
:
management:
security:
enabled: true
role: ADMINISTRATOR
太简单了我需要插入 Actuators
我们的自定义安全性(这里是 CAS
SSO)。
首先尝试为 Actuators
添加 context-path
:
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
是内部静态保护的 class 所以如果不传递参数 management.security.enabled=false
和这可能很奇怪,因为您的配置说 management.security.enabled=false
但实际上端点是安全的...
结论
- 有没有办法正确覆盖(只是一部分)
Actuators
安全性
- 我可能漏掉了什么,我完全错了?
Github. For the moment Dave Syer proposes 上已经有一个未决问题:
I think copy-paste of all the code in there is actually the best
solution for now (and set management.security.enabled=false to let
Boot know you want to do it yourself).
我没有测试是否会抛出运行时异常,但我认为您可以重用 ManagementWebSecurityConfigurerAdapter
并节省大量复制粘贴操作。至少编译器不会抱怨。
将您的配置 class 放在项目中的包 org.springframework.boot.actuate.autoconfigure
下,并从 ManagementWebSecurityAutoConfiguration.ManagementWebSecurityConfigurerAdapter
扩展。不要错过 ManagementWebSecurityConfigurerAdapter
中的所有注释。这是这里唯一的复制粘贴操作,因为 class 注释不能被 subclass.
继承
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
您在 @SpringBootApplication
中的配置。
我正在尝试保护 Spring Boot
项目内的端点 Actuators
。然而,而不是使用 ready-to-运行 Spring Security
配置 Actuators
:
management:
security:
enabled: true
role: ADMINISTRATOR
太简单了我需要插入 Actuators
我们的自定义安全性(这里是 CAS
SSO)。
首先尝试为 Actuators
添加 context-path
:
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
是内部静态保护的 class 所以如果不传递参数 management.security.enabled=false
和这可能很奇怪,因为您的配置说 management.security.enabled=false
但实际上端点是安全的...
结论
- 有没有办法正确覆盖(只是一部分)
Actuators
安全性 - 我可能漏掉了什么,我完全错了?
Github. For the moment Dave Syer proposes 上已经有一个未决问题:
I think copy-paste of all the code in there is actually the best solution for now (and set management.security.enabled=false to let Boot know you want to do it yourself).
我没有测试是否会抛出运行时异常,但我认为您可以重用 ManagementWebSecurityConfigurerAdapter
并节省大量复制粘贴操作。至少编译器不会抱怨。
将您的配置 class 放在项目中的包 org.springframework.boot.actuate.autoconfigure
下,并从 ManagementWebSecurityAutoConfiguration.ManagementWebSecurityConfigurerAdapter
扩展。不要错过 ManagementWebSecurityConfigurerAdapter
中的所有注释。这是这里唯一的复制粘贴操作,因为 class 注释不能被 subclass.
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
您在 @SpringBootApplication
中的配置。