Я использую последнюю версию Spring Boot + Spring Boot Starter Security для простого прокси-приложения. Цель состоит в том, чтобы запустить приложение с помощью одного маршрута/метода:Изменение конфигурации безопасности Spring в Runtime
@RequestMapping(value = "/api/register",
method = RequestMethod.POST,
produces = MediaType.APPLICATION_JSON_VALUE)
@Timed
public ResponseEntity<?> register(Registration registration) {
При конфигурации безопасности:
@Override
protected void configure(HttpSecurity http) throws Exception {
this.http = http
.authorizeRequests()
.antMatchers("/api/register").hasAuthority(AuthorityConstants.ADMIN)
.and();
}
public HttpSecurity getHttpSecurity() {
return http;
}
цели приложения будет принимать регистрационные запросы вида:
{
"route":"/api/foo/bar",
"proxy_location": "http://back-end-server/path/to/resource",
"role": "some-authority"
}
И тогда приложение будет добавить /api/foo/bar
маршрут с заранее определенным методом, который будет прокси (вперед) будущие запросы на обслуживание серверного.
Я знаю, что это немного тупой, реальный случай использования включает в себя веб-сайты и динамическое создание тем.
Проблема, с которой я сталкиваюсь, заключается в том, что я не могу обновить конфигурацию безопасности после завершения SecurityConfigurer.
В примере коды выше я кэширование HttpSecurity
объекта, отведенного мои SecurityConfigurer
, а затем пытаюсь использовать этот объект снова, чтобы настроить новый маршрут:
@Inject
private SecurityConfigurer security;
@RequestMapping(value = "/api/register",
method = RequestMethod.POST,
produces = MediaType.APPLICATION_JSON_VALUE)
@Timed
public ResponseEntity<?> allowGetAccounts(Registration registration) {
try {
security.getHttpSecurity()
.authorizeRequests()
.antMatchers(registration.getRoute()).hasAuthority(registration.getRole());
...
} catch (Exception e) {
log.error("Updating security failed!", e);
}
return new ResponseEntity<>(null, HttpStatus.OK);
}
Есть ли способ, чтобы обновить конфигурацию безопасности динамически во время выполнения?
Кроме того, если у кого есть какие-либо заметки о динамическом создании тем в разделе веб-камеры, которые тоже будут оценены!
Конечная цель - добавить роль в список полномочий пользователя, исправить? – slambeth
Конечная цель - добавить маршрут к конфигурации безопасности, в основном открыть другой путь для пользователей с определенной ролью. –
Вы действительно получаете исключение, или вы просто не видите каких-либо изменений в безопасности? – slambeth