我正在尝试定义和使用一个BasicRolesAllowed
名为
我的类型与快速入门中的类型之间的唯一区别是我的注释必须接受一个字符串数组(我们希望不仅使用一个角色,而且可能使用角色组合来保护方法),因此我的注释是这样定义的:
public @interface BasicRolesAllowed {
String[] value() default {};
}
在快速入门之后,我尝试定义此装饰器如何进行身份验证:
@Secures
@BasicRolesAllowed
public boolean doAdminCheck(Identity identity, IdentityManager identityManager, RelationshipManager relationshipManager) throws Exception {
/*
Sample usage of @BasicRolesAllowed is like:
@BasicRolesAllowed(value = RoleConstants.CREATE_USER)
TODO: need to get these from the @BasicRolesAllowed annotation instance/usage
*/
String[] requiredRoles = {};// get these from annotation
boolean isAuthorized = true;
for (String role : requiredRoles)
isAuthorized = isAuthorized && hasRole(relationshipManager, identity.getAccount(), getRole(identityManager, role));
return isAuthorized;
}
从片段中可以看出,技巧部分是:
String[] requiredRoles = {};// get these from annotation
如何将字符串常量传递给装饰方法上的注释,以便可以在查找角色时使用它们?
一些提示:
这里有一个类似问题的答案,但问题是在那个解决方案中;需要知道被装饰的函数或类的名称——在我的情况下这是不可能的,因为装饰器几乎可以在任何地方使用,而且我不知道如何通过 Picketlink 快速入门中显示的方法获得这些。
此外,该解决方案仅显示了如何获取传递给只需要 1 个字符串的注释的值 - 也许我可以尝试使用values()
,但上述限制仍然存在。
提前感谢任何可以提供帮助的人。