2016-11-07 172 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并没有看到它。 –