在运行时配置Spring HTTP安全性

Mat*_*see 6 spring spring-security

启动时应用所有http安全性:

protected void configure(HttpSecurity http) throws Exception {
    http
        .authorizeRequests()
        .antMatchers("/admin/**").hasRole("admin")
}
Run Code Online (Sandbox Code Playgroud)

在运行时,我正在尝试添加更多...

applicationContext.getBean(WebSecurityConfigurerAdapter).http.authorizeRequests().antMatchers("bla").hasRole("admin")
Run Code Online (Sandbox Code Playgroud)

当执行该行时,它会将其添加到http.authorizeRequests(),但/ bla仍可由"非管理员"访问

重新启动服务器时,此更改将生效,因为它正在从数据库加载bla.

如何在不重新启动服务器的情况下立即使安全性生效?

Iss*_*TIF 0

您试图在运行时动态更改 spring bean,除非您使用 spring-loaded 或 JRebel 等工具,否则很难做到这一点。关于它有很多SO:

  1. 动态更新 spring bean。是否可以?
  2. 动态改变 spring beans
  3. 我可以在运行时替换 Spring bean 定义吗?

(在我看来)适合您的用例的最佳方法是使用弹簧配置文件。
定义一个具有 /bla 授权的 bean 和另一个没有 /bla 授权的 bean。然后在不同的配置文件中使用它们。

请参阅Spring 中在运行时动态声明 beans