Я пытаюсь определить и использовать пользовательский тип привязки безопасности под названием BasicRolesAllowed
, как показано в кратких руководствах по Picketlink здесь.
Единственное отличие между моим типом и тем, что в кратком руководстве, заключается в том, что моя аннотация должна принимать массив строк (мы хотим защитить методы, используя не одну, а, возможно, комбинацию ролей), и поэтому моя аннотация определяется следующим образом:
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()
, но указанное выше ограничение все еще стоит на моем пути.
Заранее спасибо всем, кто может помочь.