可以在@PreAuthorize方法调用中使用@Component注释对象吗?

时间:2014-03-14 15:24:53

标签: java spring spring-security

我看到许多将Strings传递给Pre / PostAuthentication注释中的自定义方法调用的示例。如:

@Component("authorizationService")
public interface AuthorizationService {
    public boolean hasRoleAccessToActionType(DiceUserDetails userDetails, String action);
}

@PreAuthorize("@authorizationService.hasRoleAccessToActionType(principal, 'READ') ")

是否可以做类似的事情?

@Component("authorizationService")
public interface AuthorizationService {
    public static enum ActionType {CREATE, READ, UPDATE, DELETE};
    public boolean hasRoleAccessToActionType(DiceUserDetails userDetails, ActionType actionType);
}

@PreAuthorize("@authorizationService.hasRoleAccessToActionType(principal, @authorizationService.ActionType.READ)")

似乎这样可能无法实现?如果枚举是问题,我会对一组static final String s感到满意。我们的弹簧安全性为3.1,所有其他弹簧罐为3.2。

2 个答案:

答案 0 :(得分:0)

枚举不是问题(如果需要,Spring会将字符串文字强制转换为枚举),只要方法签名不含糊不清即可。 SpEL中还有一个“T”运算符,可用于显式创建枚举值或其他类的静态成员。文档为here

答案 1 :(得分:0)

如果您正在寻找从其字符串名称中获取Permission的便捷方法,则可以使用以下代码。这样您就不必复制Spring ACL为您提供的所有权限。

org.springframework.security.acls.domain.PermissionFactory permissionFactory = new org.springframework.security.acls.domain.DefaultPermissionFactory();
org.springframework.security.acls.model.Permission permission = permissionFactory.buildFromName(name);