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