Spring安全性@PreAurhorize hasRole()属性注入

Paw*_*ski 6 java spring-security

假设我的spring安全性和属性配置正确,我想使用属性中的角色名称

@PreAuthorize("hasRole('${role.rolename}')")
public void method() {}
Run Code Online (Sandbox Code Playgroud)

我在上面的代码示例中尝试过,但它不起作用(需要'$ {role.rolename}'字符串作为比较的角色)

如果我切换到

@PreAuthorize("hasRole('ROLE_ADMIN')")
public void method() {}
Run Code Online (Sandbox Code Playgroud)

它工作得很好.我对这种用法的动机是在各种环境下的应用程序测试中具有更好的灵

Mak*_*das 11

尝试删除''标志:

@PreAuthorize("hasRole(${role.rolename})")
public void method() {}
Run Code Online (Sandbox Code Playgroud)

编辑.我确信有更好的方法,但作为一种解决方法,您可以在某个bean上调用一些方法:

@Component("appVariablesHolder")
public class AppVariablesHolder {

    @Value("${role.rolename}") 
    private String someRole;

    public String getSomeRole() {
        return this.someRole;
    }
}

@PreAuthorize("hasRole(@appVariablesHolder.getSomeRole())")
public void method() {}
Run Code Online (Sandbox Code Playgroud)