gpt4 book ai didi

java - 在 JSF 2.0 中使用自定义 Java 注释的托管 Bean 方法授权

转载 作者:行者123 更新时间:2023-11-30 09:36:31 25 4
gpt4 key购买 nike

我想创建一个自定义注释来装饰方法,从而限制对方法调用的访问。

我的注解定义如下:

@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()”,这个调用将被拦截,并且方法上设置的参数与登录用户适当的 session 值。如果登录用户的 session 角色值足够高,将允许调用托管 Bean 的方法,否则用户将被重定向或显示适当的消息。

我的问题是,有没有一种方法可以“ Hook ”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

我只是在寻找一些指导和一些可用的选项。感谢任何能帮我解决这个问题的人!

最佳答案

您可以通过实现自定义 ActionListener 来实现这一点已注册为全局 <action-listener>faces-config.xml .

巧合的是,本周有人提出并回答了同样的问题:Custom Annotation JSF .请注意,JAAS 不是特定用途所必需的,只需获取 User来自 FacesContext 的 session 通常的方式。

关于java - 在 JSF 2.0 中使用自定义 Java 注释的托管 Bean 方法授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10722016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com