Java EE服务器上的动态角色

dea*_*mon 12 java authorization roles glassfish java-ee

我想在专用的应用程序中管理用户和角色.例如,该应用程序的用户("customerX boss")可以创建新角色"customerX employee".如果员工访问Java EE应用程序服务器(GlassFish 3),他应该获得"customerX employee"角色.

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

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

ewe*_*nli 12

Java EE中的声明性安全性确实不适合这样的要求.安全问题可以分为两类:

  • 认证
  • 授权

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

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

但是,我强烈建议坚持使用基于角色的访问控制(RBAC),而不是实现更加花哨的东西.有几个框架可以帮助处理自制的RBAC.

我们还看了一下JSecurityAcegi Security,看起来很有趣.

  • 实际上,[Ron Monzillo的博客提供了一个可移植的解决方案](http://blogs.oracle.com/monzillo/entry/using_jacc_to_determine_a)来获得`Principal`的角色. (2认同)