将应用程序属性中的角色列表注入@PreAuthorize

Whi*_*cal 2 java spring authorization spring-security spring-boot

SPEL 有什么技巧,所以我可以在 application.yml 中定义我的管理员角色,然后将它们直接加载到类似的内容中:

@PreAuthorize("hasAnyRole(${my.security.admin-roles-list})")
Run Code Online (Sandbox Code Playgroud)

……?

Mạn*_*yễn 5

您可以使用技巧从 @PreAuthorize 注释访问 bean:

application.properties

my.security.admin-roles-list=RoleA,RoleB,RoleC

@Component("securityConfiguration")
public class SecurityConfiguration {

    @Value("#{'${my.security.admin-roles-list}'.split(',')}") 
    private List<String> adminRoles;

    public List<String> getAdminRoles() {
        return adminRoles;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后使用它:

@PreAuthorize("hasAnyRole(@securityConfiguration.getAdminRoles())")
Run Code Online (Sandbox Code Playgroud)