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