0

我有一个 Java EE 应用服务器 (jboss-eap-4.3) 和几个组成更大 Web 应用程序的 .war。这个想法是.war 可以单独运行或与另一个.war 链接。因为它们都是同一个应用程序的一部分,所以我们不想显示多个登录。

我想配置 .wars 以便它们都共享相同的安全约束和安全角色。基本上 web.xml 的这一部分:

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

<security-role>
   <role-name>Admin</role-name>
</security-role>

<login-config>
   <auth-method>BASIC</auth-method>
   <realm-name>WebApp</realm-name>
</login-config>

最近我们的角色经常发生变化,我们也会定期添加新的 .war。此外,我们根据部署环境更改身份验证方法,这增加了另一个调整的理由。理想情况下,我想要一种方法来中断 web.xml 的安全部分,以便其他人可以“继承”它。我认为领域可能是寻找这个的好地方,但我没有找到任何有希望的东西。

请注意,此容器中还有其他 Web 应用程序具有完全不同的安全域,因此 tomcat 的全局设置可能不合适。

4

1 回答 1

0

这不是一个很好的答案,但我最终使用 ant 宏定义将脏工作自动化,如下所示。

  <!-- 
   | Take a "plain" web.xml and add security settings to it.  
   | This will add BASIC authentication with Admin, Operator, and Guest role access 
   |
   -->
   <taskdef resource="net/sf/antcontrib/antlib.xml" /> 
   <macrodef name="addSecurityToWeb.xml">
      <attribute name="file"/>
      <sequential>
         <if>
            <not>
                <isfileselected file="@{file}">
                    <contains text="login-config" ignorewhitespace="true"/>
                </isfileselected>
            </not>
            <then>
               <replace file="@{file}">
                  <replacetoken><![CDATA[</web-app>]]></replacetoken>
                  <replacevalue>
   <![CDATA[
    <security-constraint>
        <web-resource-collection>
            <web-resource-name>Protected Area</web-resource-name>
            <url-pattern>/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>Admin</role-name>
        </auth-constraint>

        <transport-guarantee>NONE</transport-guarantee>
    </security-constraint>

    <!-- Security roles referenced by this web application -->
    <security-role>
        <role-name>Admin</role-name>
    </security-role>

    <login-config>
        <auth-method>BASIC</auth-method>
        <realm-name>WebApp</realm-name>
    </login-config>
</web-app>
   ]]>    
                  </replacevalue>
               </replace>
            </then>
         </if>
      </sequential>
  </macrodef>
于 2011-12-05T15:08:32.510 回答