2016-11-07 3 views
6

Все безопасности HTTP применяется при запуске:Настройка Spring HTTP Security во время выполнения

protected void configure(HttpSecurity http) throws Exception { 
    http 
     .authorizeRequests() 
     .antMatchers("/admin/**").hasRole("admin") 
} 

Во время выполнения, я пытаюсь добавить больше к нему ...

applicationContext.getBean(WebSecurityConfigurerAdapter).http.authorizeRequests().antMatchers("bla").hasRole("admin") 

Когда эта линия выполнена , он добавляет его в http.authorizeRequests(), но/bla по-прежнему доступен «non admins»

При перезапуске сервера это изменение вступает в силу, поскольку оно загружает bla из базы данных.

Как сделать защиту незамедлительно без перезагрузки сервера?

+0

Вы получили решение для этого? – theLearner

+0

nope, если вы знаете, пожалуйста, поделитесь: D –

ответ

0

Вы пытаетесь динамически менять весенний боб во время выполнения, что очень сложно сделать, если вы не используете такие инструменты, как подпружиненный или JRebel. Существует много SO о нем:

  1. Update spring beans dynamically. Is it possible?
  2. dynamically change spring beans
  3. Can I replace a Spring bean definition at runtime?

Лучший подход (на мой взгляд) для случая использования является использование пружинных профилей.
Определите фасоль с разрешениями для/bla и другого bean-компонента. Затем используйте их в разных профилях.

см. dynamically declare beans at runtime in Spring

+1

Проблема в том, что он модифицирует компонент конфигурации. Я думаю, что изменение ключа безопасности в runtime будет вариантом, если базовая цепочка будет доступна. Но это правда, что многие весенние бобы не предназначены для этого, и вам нужно обернуть такие бобы делегатами, чтобы вы могли перестроить синглтоны, если это необходимо. –

+0

Его 100% динамический, профили + классы для профиля не будут работать, так как нет возможности узнать возможности. Http.authorizeRequests(). UrlMappings получает новый элемент во время выполнения, но весна не видит его при попадании URL-адреса. –

Смежные вопросы