Переопределение приводов spring без потери конфигурируемых конечных точек
Я пытаюсь защитить конечные точки Actuators
внутри Spring Boot
проекта. Однако вместо использования готовой конфигурации Spring Security
для Actuators
:
management:
security:
enabled: true
role: ADMINISTRATOR
Слишком просто мне нужно подключить Actuators
к нашей пользовательской безопасности (здесь CAS
SSO).
Сначала попробуйте добавить 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
, но на самом деле конечные точки защищены...
Заключение
- Есть ли способ переопределить (только часть) правильно
Actuators
security
- Могу я что-то упустить, и я совершенно не прав?
Ответы
Ответ 1
Уже существует незавершенная проблема в Github. На данный момент Dave Syer предлагает:
Я думаю, что копировать-вставить весь код, на самом деле, самый лучший на данный момент (и установите для управления .security.enabled = false, чтобы позволить Boot знает, что вы хотите сделать это самостоятельно).
Я не тестировал, будет ли исключено исключение во время выполнения, но я думаю, что вы можете повторно использовать 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
вашу конфигурацию в @SpringBootApplication
.