javaee服务器上的动态角色

javaee服务器上的动态角色,java,jakarta-ee,glassfish,authorization,roles,Java,Jakarta Ee,Glassfish,Authorization,Roles,我想在专用应用程序中管理用户和角色。例如,此应用程序的用户(“customerX boss”)可以创建一个新角色“customerX employee”。如果员工访问JavaEE应用服务器(GlassFish 3),他应该获得“customerX员工”角色 这听起来很简单,但JavaEE不支持,因为组在启动时映射到角色,而应用程序中的角色是静态的 在Java EE(6)环境中,在运行时管理用户角色的最佳方法是什么?Java EE中的声明式安全性确实不适合此类要求。安全问题可分为两部分: 认证

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

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


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

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

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

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

不过,我强烈建议坚持使用基于角色的访问控制(RBAC),而不要实现更高级的功能。有几个框架可以帮助处理自制的RBAC


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

感谢您的回答,特别是提示即使是动态设置的角色也必须在web.xml或ejb.xml中静态声明!那将是我的下一个陷阱。我将检查JSecurity,它是一种Spring安全性(Acegi的继承者)。是的,使用
@DeclaredRoles
声明的角色实际上是符号名称,应该使用
映射到外部目录(例如LDAP)中的角色。如果映射是1对1,Glassfish有一个选项“默认主体到角色映射”,但这只是解决方案的一半,您仍然必须在某处列出角色。也没有办法通过JEE API实际列出用户拥有的所有角色。您将需要迭代固定的角色列表,并使用
iscalerinrole
isUserInRole
。有一些方法可以向下转换
主体
,然后获得角色列表,但我认为它不可移植(我不记得这一个)。实际上,是为了获得
主体
的角色。我创建这个用例是为了(除其他外)支持这个用例。如果您或其他任何人仍然对JavaEE角色缺乏活力感到困扰,请投赞成票或留下评论。