我想创建一个自定义注释来装饰限制对方法调用的访问的方法。
我的注释定义如下:
@Inherited
@Documented
@Retention(RetentionPolicy.RUNTIME)
public @interface Restrict {
public enum RoleType {All, ROLE_A, ROLE_B, ROLE_C, ROLE_D}
String roleLevel();
RoleType roleType();
}
然后使用如下注释。注释接收两个参数,一个是所需的最低角色类型,另一个是所需的最低角色级别。
@Restrict(roleType = RoleType.ALL, roleLevel="user")
String deleteSomething() {
// delete intended whatever
return success;
}
我的意图是,当对使用此注释修饰的托管 Bean 方法的任何调用发生时,如上述方法“deleteSomething()”中所述,此调用将被拦截,并将方法上设置的参数与登录的参数进行比较用户适当的会话值。如果登录的用户会话角色值足够高,则允许调用 Managed Bean 的方法,否则将重定向用户或显示适当的消息。
我的问题是,有没有一种方法可以“挂钩”到被 bing 调用的方法,然后通过反射,查看方法上是否有 @Restrict 注释,然后处理所述注释。我已经尝试在 PhaseListener 类中执行此操作,但我不确定如何找出调用什么托管 Bean 来执行反射。我读过有关客户 ElResolver 的信息,但我不确定这是否对我有帮助。我还尝试找到一种方法来简单地创建一个侦听器,该侦听器以某种方式知道何时调用了带有 @Restrict 注释的方法。
Environment Specifics:
Tomcat 6.0.35 (considering upgrading to Tomcat 7.0.27)
JSF version 2.1.7
RichFaces 4.1.0
我只是在寻找一些指导和一些可供我使用的选项。感谢任何可以帮助我的人!