2016-11-07 90 views
6

所有HTTP安全啓動應用:配置Spring HTTP安全性在運行

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仍可通過「非管理員」訪問

當服務器重新啓動時,此更改將生效,因爲它正從數據庫加載bla。

如何在不重新啓動服務器的情況下立即生效?

+0

您是否得到了解決方案? – theLearner

+0

nope,如果你知道一個請分享:D –

回答

0

您試圖動態地在運行時更改spring bean,除非使用像spring-loaded或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?

最好的辦法(在我看來)爲您的使用情況是使用Spring配置文件。
定義一個擁有/ bla和另一個bean的授權的bean。然後在不同的檔案中使用它們。

請參閱dynamically declare beans at runtime in Spring

+1

這裏的問題是他正在修改配置bean。我認爲如果可以訪問底層鏈,那麼在運行時修改安全篩選將是一個選項。但是,確實很多spring bean並不是爲此而設計的,而且您需要將這些bean包裝在代表中,以便您可以根據需要重新構建單例。 –

+0

它的100%動態,配置文件+每個配置文件的類將無法正常工作,因爲無法知道可能性。 http.authorizeRequests()。urlMappings在運行期間獲取新項目,但當URL被擊中時,spring並沒有看到它。 –