Spring boot-keycloak 硬编码角色

Posted

技术标签:

【中文标题】Spring boot-keycloak 硬编码角色【英文标题】:Spring boot- keycloak hardcoded roles 【发布时间】:2021-08-18 16:11:47 【问题描述】:

是否可以动态实现“hasAnyRole”而不是在服务内部硬编码,以便用户可以随时更改它? 我知道有一种方法可以对范围做类似的事情,但它不符合所需的要求。

@Override
protected void configure(HttpSecurity http) throws Exception 
    super.configure(http);
    http
            .authorizeRequests()
            .antMatchers("/*").permitAll()
            .antMatchers("/test/roles").hasAnyRole("BYREAD", "BYEDIT")
            .anyRequest().permitAll();

【问题讨论】:

【参考方案1】:

根据您希望用户更新角色的方式,您可以使用引用 Bean 的网络安全表达式来完成它。

@Override
protected void configure(HttpSecurity http) throws Exception 
    http
            .authorizeRequests()
            .antMatchers("/test/roles").access("@permission.check(authentication)")
            // ...


@Bean
public PermissionChecker permission() 
    // ...


static class PermissionChecker 

    public boolean check(Authentication authentication) 
        // ...
    


在上面的示例中,@permission 指的是 Bean,称为 permission。 您可以将所需的任何逻辑添加到 check 方法中。

有关更多详细信息,请参阅 Spring Security 参考文档中的this section。

【讨论】:

以上是关于Spring boot-keycloak 硬编码角色的主要内容,如果未能解决你的问题,请参考以下文章

Spring Cloud Config Server 是硬编码路径的有效解决方案吗?

登录表单用户凭据而不是 LDAP Spring Security 中的硬编码 UserDn 和密码

有没有办法在 Spring Security 插件的属性文件中定义角色而不是硬编码它们?

Spring高级配置之运行时注入

Spring实战bean装配的运行时值注入——属性占位符和SpEL

品味Spring Cache设计之美