【发布时间】: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