Как я могу разделить ограничения безопасности между .wars? - PullRequest
0 голосов
/ 14 октября 2011

У меня есть сервер приложений Java EE (jboss-eap-4.3) и несколько .wars, которые составляют более крупное веб-приложение. Идея заключается в том, что .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>

В последнее время наши роли часто менялись, и мы периодически добавляем новые .wars. Кроме того, мы меняем метод аутентификации в зависимости от среды развертывания, что добавляет еще одну причину для настройки. В идеале мне бы хотелось, чтобы был отключен раздел безопасности web.xml, чтобы его могли «унаследовать» другие. Я думал, что царства могут быть хорошим местом для поиска этого, но я не нашел ничего обещающего.

Обратите внимание, что в этом контейнере есть еще другие веб-приложения с совершенно другим доменом безопасности, поэтому глобальные настройки для tomcat могут не подходить.

1 Ответ

0 голосов
/ 05 декабря 2011

Не очень хороший ответ, но в итоге я автоматизировал грязную работу с помощью макросов 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>
...