web.xml中的安全性约束,用于没有角色成员身份的已认证用户

msa*_*din 12 java web.xml glassfish jaas

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

我在Glassfish 3.1.1中使用自定义域.此自定义领域(实现AppservPasswordLoginModuleInterface)从HTTPS请求中获取安全令牌,验证安全令牌,然后将用户返回到Glassfish.

问题是安全令牌不包含任何组,这意味着方法public String [] getGroupsList()或自定义域返回一个空列表(正确,因为安全令牌中没有角色).

也就是说,我希望有一个安全约束,只有经过验证的用户才能登录.我知道我可以在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>
Run Code Online (Sandbox Code Playgroud)

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

在web.xml中是否有一种方法可以定义只允许经过身份验证的用户,忽略它们所处的角色并忽略它们是否处于任何角色.

有几个我无法实现的解决方案:

  • 我无法将底层LDAP更改为包含角色,因为LDAP模式以及LDAP用户映射到安全性的方式会使我们超出范围.
  • 我必须使用当前的自定义域处理程序,我不能用我自己的一个只替换默认组替换它.我曾经尝试过这次,但它确实奏效了.但是我无法用自己的自定义域替换现有的自​​定义域,因为自定义域应该是通用的.

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

任何帮助,将不胜感激.

Wil*_*ill 20

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

<auth-constraint>
    <role-name>*</role-name>
</auth-constraint>
Run Code Online (Sandbox Code Playgroud)

这家伙设法解决了这个问题.

  • 适用于 WF10.1.0。不要忘记在 &lt;security-role/&gt; 中也设置一个 &lt;role-name&gt;*&lt;/role-name&gt; (否则,如果 * 仅在 &lt;auth-constraint/&gt; 中,这将不起作用)。 (2认同)

Rya*_*yan 5

使用两个星号:

<auth-constraint>
  <role-name>**</role-name>
</auth-constraint>
Run Code Online (Sandbox Code Playgroud)

请参阅 Servlet 4.0 规范的第 13.8 节:https://javaee.github.io/servlet-spec/downloads/servlet-4.0/servlet-4_0_FINAL.pdf

单星号意味着用户必须至少具有任何声明的角色之一,而双星号意味着用户必须经过身份验证。因此,对于单个星号,用户必须具有 web.xml 部分中声明的角色之一security-role,并且似乎某些应用程序服务器(如 JBoss/Wildfly)允许您在此部分中放置单个星号,以使此工作类似到双星号。安全角色部分中的这个星号似乎是非标准的,并且可能不可移植:

<security-role>
  <role-name>*</role-name>
</security-role>
Run Code Online (Sandbox Code Playgroud)