我想在专用的应用程序中管理用户和角色。例如,该应用程序的用户(“customerX boss”)可以创建新角色“customerX employee”。如果员工访问Java EE应用程序服务器(GlassFish 3),他应该获得“customerX employee”角色。
这听起来很简单,但Java EE不支持它,因为组在启动时映射到角色,而应用程序中的角色是静态的。
在Java EE(6)环境中在运行时管理用户角色的最佳方法是什么?
我想在专用的应用程序中管理用户和角色。例如,该应用程序的用户(“customerX boss”)可以创建新角色“customerX employee”。如果员工访问Java EE应用程序服务器(GlassFish 3),他应该获得“customerX employee”角色。
这听起来很简单,但Java EE不支持它,因为组在启动时映射到角色,而应用程序中的角色是静态的。
在Java EE(6)环境中在运行时管理用户角色的最佳方法是什么?
Java EE中的声明性安全性确实不适合这种要求。安全问题可以分为两类:
我曾经有过类似的要求。我们使用内置身份验证来设置主体,然后依赖于默认的Java EE登录机制。但我们最终在应用级别手动管理授权部分。
实际上,即使是将被加载并与委托人相关联的角色(isUserInRole
对于网络和 isCallerInRole
对于EJB)需要在中指定 web.xml
要么 ejb.xml
这没有提供足够的灵活性。然后我们从LDAP或ActiveDirectory手动加载角色(根据主体)。然后我们使用EJB3拦截器和Servlet过滤器来自己执行安全检查。
但是,我强烈建议坚持使用基于角色的访问控制(RBAC),而不是实现更加花哨的东西。有几个框架可以帮助处理自制的RBAC。