【问题标题】:Multiple security realms多个安全领域
【发布时间】:2016-04-20 19:29:07
【问题描述】:

我尝试在我的应用程序中设置多个安全领域,但在部署期间出现异常:

消息:检测到多个登录配置元素

web.xml 片段:

....
<security-constraint>
    <display-name>Admin Constraint</display-name>
    <web-resource-collection>
        <web-resource-name>Admin Pages</web-resource-name>
        <description/>
        <url-pattern>/admin/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <description/>
        <role-name>admin</role-name>
    </auth-constraint>
</security-constraint>
<login-config>
    <auth-method>BASIC</auth-method>
    <realm-name>ApplicationRealm</realm-name>
</login-config>
<login-config>
    <auth-method>FORM</auth-method>
    <realm-name>mb-domain</realm-name>
</login-config>
<security-role>
    <description/>
    <role-name>admin</role-name>
</security-role>
<security-role>
    <description/>
    <role-name>user</role-name>
</security-role>
...

我做错了什么?

【问题讨论】:

  • 除了这违反了规范之外,您的用例还不清楚。为什么你需要多个登录配置?容器如何知道应用程序中的受限 URL 使用哪个登录配置?
  • @CoolBeans "你为什么需要多个登录配置?" - 许多用例 -> 允许用户选择如何登录(只需注销该网站并查看它为您提供的登录选项),或者为应用程序的不同部分设置不同的身份验证机制。甚至还有自动回退的用例(首先尝试令牌,如果它无法透明地回退到用户名/密码)
  • @guest "我尝试拥有多个安全领域" - 您展示的是身份验证机制而不是领域。 Realm 作为术语在 Java EE 中的定义有点不明确,它也可以表示“身份存储”。
  • @dextermeyers 您可以为人们提供多种身份验证方式,但实际的登录配置仍然必须是一种。其他部分必须通过配置额外的 JAAS 登录模块以编程方式完成,如果需要,这些模块可以堆叠。
  • @CoolBeans "通过配置额外的 JAAS 登录模块" - 如果服务器没有使用 JAAS 登录模块怎么办?问题提到了 JBoss,他们重新使用了 JAAS LoginModule 接口(但是他们在那里做了很多特殊的事情,你不能再称之为普通的 JAAS),但是像 Tomcat 或 Liberty 这样的其他服务器根本不使用 JAAS。又是什么名言? Jaas 并不是您认为的通用标准。

标签: security jakarta-ee jboss wildfly jaas


【解决方案1】:

每个 Web 模块部署描述符只能使用一个 &lt;login-config&gt;

根据Servlet Specification v. 3.1 的§14.2:

处理部署描述符的规则

[...]

  • web-app 下的子元素在此版本的规范中可以是任意顺序。由于 XML Schema 的限制,distributablesession-configwelcome-file-listjsp-configlogin-configlocale-encoding-mapping-list 元素的多样性从“可选”更改为“0 或更多”。当部署描述符包含多个session-configjsp-configlogin-config 元素时,容器必须通过描述性错误消息通知开发人员。

替代方案:

  • 使用编程身份验证(基于 JASPIC 或您的 Java EE/Servlet 实现提供的任何工具)。
  • 使用 EAR 打包(如果可以接受每个模块的单一身份验证策略)。
  • 删除容器管理的身份验证。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-25
    相关资源
    最近更新 更多