Я хотел бы создать пользовательскую аннотацию, чтобы украсить методы, которые ограничивали бы доступ к вызовам методов.Авторизация управляемого управляемого компонента с использованием пользовательских аннотаций java в JSF 2.0
Моя аннотация определена ниже:
@Inherited
@Documented
@Retention(RetentionPolicy.RUNTIME)
public @interface Restrict {
public enum RoleType {All, ROLE_A, ROLE_B, ROLE_C, ROLE_D}
String roleLevel();
RoleType roleType();
}
Затем с помощью аннотации, как в следующем. Аннотации получают два параметра, один из которых является обязательным минимальным типом roleType, а другой - минимальным требуемым уровнем.
@Restrict(roleType = RoleType.ALL, roleLevel="user")
String deleteSomething() {
// delete intended whatever
return success;
}
Мой умысел, когда происходит любой вызов Управляемой методы Bean, который украшен этой аннотацию, как и в описанном выше способе «deleteSomething()», этот вызов будет перехвачен и параметры, установленный на метод по сравнению с зарегистрированными пользователями соответствующими значениями сеанса. Если значения роли сеанса зарегистрированных пользователей достаточно высоки, метод Managed Bean будет разрешен для вызова, иначе пользователь будет перенаправлен или отобразится соответствующее сообщение.
Мой вопрос в том, есть ли способ, которым я могу «зацепиться» за то, какие методы называются bing, а затем, через отражение, увидеть, есть ли аннотация @Restrict в методе и затем обрабатывать аннотацию. Я пробовал делать это в классе PhaseListener, но я не уверен, как узнать, что вызывается Managed Bean для выполнения рефлексии. Я читал о custome ElResolver, но я не уверен, что это все, что мне поможет. Я также попытался найти способ просто создать слушателя, который каким-то образом знает, когда был вызван метод, который был аннотирован с помощью @Restrict.
Environment Specifics:
Tomcat 6.0.35 (considering upgrading to Tomcat 7.0.27)
JSF version 2.1.7
RichFaces 4.1.0
Я просто ищу руководство и некоторые варианты, доступные мне. Спасибо всем, кто может мне помочь!
По совпадению, кто-то другой задал тот же вопрос на этой неделе, и решение заключалось в использовании пользовательской реализации «ActionListener»: http://stackoverflow.com/questions/10660273/custom-annotation-jsf – BalusC
@BalusC Спасибо BalusC за ваше время и быстрый ответ. Исправьте меня, если я ошибаюсь, но решение в вашей ссылке с помощью ActionListener обрабатывает выражения в атрибуте «действие»? Как обращаться с вызовами ajax. Кроме того, я не использую JaaS. Мы просто устанавливаем объект для сеанса для пользователя. Этот объект содержит информацию о разрешении, и мы используем фильтр для аутентификации. Нужно ли мне реализовать что-то вроде JaaS, чтобы сделать то, что я хочу работать? Мои знания об этих технологиях ограничены, поэтому любое руководство очень ценится! – Mickelback
Он также вызывается для вызовов ajax. Просто проверьте, является ли действие, подлежащее вызову, действием или слушателем действия. JaaS не требуется. Дело в том, что вы можете использовать «ActionListener» для этого. – BalusC