我想在专用应用程序中管理用户和角色。例如,此应用程序的用户(“customerX老板”)可以创建一个新角色“customerX雇员”。如果员工访问Java EE应用程序服务器(GlassFish 3),则他应获得“customerX员工”角色。

听起来很简单,但是Java EE不支持它,因为组在启动时被映射到角色,并且应用程序中的角色是静态的。

在Java EE(6)环境中,在运行时管理用户角色的最佳方法是什么?

最佳答案

Java EE中的声明式安全确实不适合此类要求。安全性问题可以分为两部分:

  • 身份验证
  • 授权

  • 我曾经有过类似的要求。我们使用内置身份验证来设置主体,然后依赖默认Java EE登录机制。但是我们最终在应用程序级别手动管理授权部分。

    实际上,即使是将要加载并与主体相关联的角色(Web的isUserInRole和EJB的isCallerInRole)也需要在web.xmlejb.xml中指定,这不能提供足够的灵活性。然后,我们必须从LDAP或ActiveDirectory手动加载角色(根据主体)。然后,我们使用EJB3拦截器和Servlet过滤器自己执行安全性检查。

    但是,我强烈建议您坚持使用基于角色的访问控制(RBAC),而不要实现其他幻想。有几个框架可以帮助处理自制的RBAC。

    我们还查看了JSecurityAcegi Security,它们似乎很有趣。

    10-04 18:28