Spring Security 在运行时动态添加/删除 antMatchers 和角色

Posted

技术标签:

【中文标题】Spring Security 在运行时动态添加/删除 antMatchers 和角色【英文标题】:Spring Security add/remove antMatchers and roles dynamically at runtime 【发布时间】:2021-11-23 21:21:06 【问题描述】:

有没有办法动态改变这个地方?换句话说,调用添加或删除 antMatchers 或完全覆盖的方法。地图角色等。

@EnableWebSecurity
public class WebSecurityConfigAdapter extends WebSecurityConfigurerAdapter 

    @Override
    protected void configure(HttpSecurity http) throws Exception 
        //Change this configs dynamically at runtime
    
    

【问题讨论】:

【参考方案1】:

我最终得到了这个solution。解决方案是关闭当前上下文并运行新上下文。当然,它有缺点,因为它会导致停机,但我使用负载均衡器和几个节点,所以对我来说没问题。

【讨论】:

【参考方案2】:

在 Spring Security 版本 5.6 中,目前在 5.6.0.M3 中,您可以创建一个 AuthorizationManager bean 并定义将您的规则放置在您想要的任何位置,如下所示:

@Autowired
private MyCustomAuthorizationManager access;

@Override
protected void configure(HttpSecurity http) throws Exception 
    http.authorizeRequests().access(access);

或者更好的是,您可以定义一个SecurityFilterChain bean 并利用方法参数注入,而不是扩展WebSecurityConfigurerAdapter

@Bean
SecurityFilterChain app(HttpSecurity http, MyCustomAuthorizationManager access) throws Exception 
     ...
     http.authorizeRequests().access(access);
     ...
     return http.build();

有一个great presentation 显示如何执行此操作。

【讨论】:

以上是关于Spring Security 在运行时动态添加/删除 antMatchers 和角色的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring Security 中动态切换应用程序上下文?

在运行时延迟初始化 Spring Security + 重新加载 Spring Security 配置

添加 Spring Security 后,我的 Spring 应用程序停止运行

使用 Spring Security 在登录时添加employeeId

Spring运行时动态注册bean

HandlerInterceptorAdapter 在使用 Spring Security 登录时不运行