【问题标题】:security-role-mapping not working with file descriptor安全角色映射不适用于文件描述符
【发布时间】:2011-11-27 17:03:58
【问题描述】:

将 glassfish 3.1.1 用于 Java EE6 项目,glassfish-web.xml 中定义的安全角色映射不会影响“用户 - 角色”映射。

调用request.isUserInRole("USER")request.isUserInRole("ADMIN") 总是返回false

glassfish-web.xml

<glassfish-web-app>
    <security-role-mapping>
        <role-name>ADMIN</role-name>
        <group-name>ADMIN</group-name>
    </security-role-mapping>
    <security-role-mapping>
        <role-name>USER</role-name>
        <group-name>USER</group-name>
    </security-role-mapping>
</glassfish-web-app>

如下所示用@DeclareRoles注释LoginBean.java,按预期分配角色。

LoginBean.java

...
@DeclareRoles({"ADMIN", "USERS"})
@Named(value = "loginBean")
@RequestScoped
public class LoginBean implements Serializable { ...

为什么我需要LoginBean.java 中的@DeclareRoles 才能获得request.isUserInRole 的有效“用户-角色”映射?

【问题讨论】:

    标签: jakarta-ee ejb-3.0 glassfish-3 cdi


    【解决方案1】:

    glassfish-web.xml 中的角色映射将 Java EE 应用程序的安全角色名称转换为部署环境的用户/组机制。角色是抽象的......在您的应用程序使用角色之前,映射是不必要的,也不会被咨询。

    【讨论】:

      【解决方案2】:

      A similar question on Coderanch 引用 17.2.5.3 引用 Bean 代码的安全角色声明 EJB 3.1 specification:

      Bean Provider 负责使用 DeclareRoles 注释 或部署的security-role-ref 元素 描述符来声明所有使用的安全角色名称 企业 bean 代码。 DeclareRoles 注释在一个 bean 类,它用于声明可能被测试的角色 从带注释的类的方法中调用isCallerInRole声明安全角色允许 Bean Provider, 应用程序组装者或部署者链接这些安全角色名称 在代码中用于为装配体定义的安全角色 应用程序。

      [...]

      如果不使用DeclareRoles注解,Bean Provider必须 使用部署描述符的security-role-ref 元素来 声明代码中引用的安全角色。

      (强调我的)

      所以这只是对 Deployer 的一个简单提示,他们不必解释代码来获取已使用角色的列表。如果开发人员使用来自其他方法或非常复杂的逻辑的角色名称调用isUserInRole() 方法,这可能会非常困难。

      这也很有用(来自17.3 Bean Provider 和/或 Application Assembler 的职责):

      提供企业安全视图的主要原因 beans 是为了简化 Deployer 的工作。在没有安全保障的情况下 一个应用程序的视图,部署者需要详细的知识 应用程序,以便安全地部署应用程序。例如, 部署者必须知道每种业务方法对 确定哪些用户可以调用它。定义的安全视图 Bean Provider 或 Application Assembler 提供了一个更统一的 查看 Deployer,让 Deployer 不太熟悉 应用程序。

      (我看到问题是关于 Web 应用程序的,但我认为背后的原因是相同的,并且 servlet 规范不是那么详细。)

      来自部署者的职责:安全角色的分配 (17.4.2)

      部署者分配委托人和/或委托人组(例如 个人用户或用户组)用于管理安全性 操作环境到通过定义的安全角色 DeclareRolesRolesAllowed 元数据注释和/或 security-role 部署描述符的元素。

      因此,根据规范,glassfish-web.xml 是由 Deployer(不是 Bean Provider 或 Application Assembler)创建的,对于 Deployer 的工作,他需要来自“DeclareRolesRolesAllowed 元数据注释和/或 security-role 部署描述符的元素。”

      【讨论】:

      • >So, according to the spec the glassfish-web.xml is created by the Deployer - 我知道您只是在引用规范,但请考虑一下;有多少项目实际上有一个“部署者”?当然不是全部,我敢说甚至不是大部分......
      猜你喜欢
      • 2011-05-08
      • 2015-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-12
      • 2015-09-04
      相关资源
      最近更新 更多