我有自己的领域类扩展了AppservPasswordLoginModule和AppservRealm,我在数据库中从我自己的表中获取用户和角色。在web.xml中,我定义了对页面的访问权限并且它可以工作 我有一些机制可以使用@SessionScoped注释从我的bean中的menu.xml文件中读取主菜单。 我想使用web.xml中的规则来仅显示用户可以访问的项目(在web.xml中定义),而不在menu.xml文件中重复配置。 我想解决方案可能是在我在SessionScoped bean中为此页面创建菜单项时检查对页面的访问,但我不知道如何轻松检查它。 这种情况的最佳解决方案是什么? 我正在使用glassfish 4.1和jsf 2.2。
答案 0 :(得分:0)
我通过以下方法解决了这个问题:
在我的ServletListener中
@WebListener
public class implements ServletListener ServletContextListener {...}
我从web.xml读取security-constraint,解析它们并将其存储在我的@ApplicationScoped bean中。
在@SessionScoped bean中,在@PostConstruct注释方法中,我将所有角色存储在@ApplicationScoped bean中并通过
检查每个人FacesContext.getCurrentInstance().GetExternalContext().IsUserInRole(role);
方法
所以我拥有所有当前的用户角色。然后,在我的@SessionScoped bean中,对于每个菜单项,我检查此菜单项的url所代表的资源是否可用于当前用户拥有的角色。
编辑:这个解决方案的不好的一面是我只分析web.xml文件,没有注释