我非常绝望,因为我认为必须有一个简单的解决方案来解决我的问题,但是我正在寻找-无济于事。

我在Glassfish 3.1.1中使用自定义 Realm 。此自定义 Realm (实现AppservPasswordLoginModuleInterface)从HTTPS请求中获取安全 token ,验证安全 token ,然后将用户返回给Glassfish。

问题在于安全 token 不包含任何组,这意味着方法public String [] getGroupsList()或自定义 Realm 会返回一个空列表(正确的原因是,安全 token 中没有角色)。

就是说,我想提出一个安全约束,只有经过验证的用户才能登录。我知道我可以在web.xml中使用以下约束:

<security-constraint>
  <web-resource-collection>
    <web-resource-name>mywebapp</web-resource-name>
    <url-pattern>/*</url-pattern>
  </web-resource-collection>
  <auth-constraint>
    <role-name>Users</role-name>
  </auth-constraint>
</security-constraint>

但是因为我没有任何组,所以无法将任何组映射到角色,因此不能将auth-constraint与role-name一起使用。

在web.xml中,是否有一种方法可以定义只允许经过身份验证的用户,而忽略他们是哪个角色,也完全不考虑他们是否具有任何角色。

有几种我无法实现的解决方案:
  • 我无法更改基础LDAP以包括角色,因为LDAP模式以及LDAP用户映射到安全 token 的方式超出了我们的范围。
  • 我必须使用当前的自定义 Realm 处理程序,我不能用自己的一个替换它,而该处理程序只返回默认组。我曾经尝试过一次,并且有效。但是我不能用我自己的替换现有的定制 Realm ,因为定制 Realm 应该是通用的。

  • 但是我真的认为web.xml中应该有一种方法可以说:忽略所有组和角色,我只想要经过身份验证的用户?

    任何帮助,将不胜感激。

    最佳答案

    很老了,但是对于那些寻找答案的人,可以使用*角色名称:

    <auth-constraint>
        <role-name>*</role-name>
    </auth-constraint>
    

    This guy设法解决了这个问题。

    07-24 20:10
    查看更多