我看到许多将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。
答案 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);