多个安全领域

时间:2016-04-20 19:29:08

标签: security java-ee jboss wildfly jaas

我尝试在我的应用程序中使用多个安全领域,但在部署期间我遇到异常:

  

消息:检测到多个login-config元素

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>
...

我做错了什么?

1 个答案:

答案 0 :(得分:4)

每个Web模块部署描述符只能使用一个<login-config>

根据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打包(如果每个模块可以使用单个身份验证策略)。
  • 删除容器管理的身份验证。