Знаток: Настройте web.xml проекта веб-приложения

У меня есть веб-приложение проект Знатока, и я хочу настроить файл web.xml в зависимости от Профиля, который работает. Я использую Военный плагин Знатока, который позволяет мне определять каталог "ресурсов", где файлы могут быть фильтрованы. Однако одна только фильтрация не достаточна для меня.

Более подробно я хочу включать (или исключить) целый раздел по безопасности, в зависимости от профиля I выполнение. Это - часть:

....
....

<security-constraint>

    <web-resource-collection>
        <web-resource-name>protected</web-resource-name>
        <url-pattern>/pages/*.xhtml</url-pattern>
        <url-pattern>/pages/*.jsp</url-pattern>
    </web-resource-collection>

    <auth-constraint>
        <role-name>*</role-name>
    </auth-constraint>

    </security-constraint>
        <login-config>
        <auth-method>${web.modules.auth.type}</auth-method>
        <realm-name>MyRealm</realm-name>
    </login-config>

<security-constraint>

....
....

Если это не сделано легко, есть ли способ иметь два файла web.xml и выбрать соответствующий в зависимости от профиля?

52
задан Bart 4 September 2013 в 22:12
поделиться

2 ответа

есть ли способ создать два файла web.xml и выбрать подходящий в зависимости от профиля?

Да, в каждый профиль вы можете добавить конфигурацию maven -war-plugin и настроить каждый так, чтобы он указывал на другой web.xml .

<profiles>
    <profile>
        <id>profile1</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-war-plugin</artifactId>
                    <configuration>
                        <webXml>/path/to/webXml1</webXml>
                    </configuration>
                </plugin>
                 ...

В качестве альтернативы необходимости указывать конфигурацию maven-war-plugin в каждом профиле, вы можете указать конфигурацию по умолчанию в основном разделе POM, а затем просто переопределить ее для определенных профилей.

Или, чтобы быть проще, в главном вашего POM используйте свойство для ссылки на атрибут webXml , а затем просто измените его значение в разные профили

<properties>
    <webXmlPath>path/to/default/webXml</webXmlPath>
</properties>
<profiles>
    <profile>
        <id>profile1</id>
        <properties>
            <webXmlPath>path/to/custom/webXml</webXmlPath>
        </properties>
    </profile>
</profiles>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <configuration>
                <webXml>${webXmlPath}</webXml>
            </configuration>
        </plugin>
        ...
74
ответ дан 7 November 2019 в 09:01
поделиться

"matt b" уже опубликовал ответ, который представляет собой наиболее изобретательный способ сделать это. Я бы рекомендовал это делать в 99% случаев.

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

Внимание! За этим следует очень липкое решение, которое не подойдет для слабонервных:

В вашем pom.xml:

Внимание, редакторы StackOverflow !!!!

Экранирование html-сущности - это часть решения. Решение будет НЕ работает, если вы замените все это знаками «больше» и «меньше». Пожалуйста, оставьте ответ как есть ...

<properties>
    <test.security.config>
        &lt;security-constraint&gt;
            &lt;web-resource-collection&gt;
                &lt;web-resource-name&gt;protected&lt;/web-resource-name&gt;
                &lt;url-pattern&gt;/pages/*.xhtml&lt;/url-pattern&gt;
                &lt;url-pattern&gt;/pages/*.jsp&lt;/url-pattern&gt;
            &lt;/web-resource-collection&gt;

            &lt;auth-constraint&gt;
                &lt;role-name&gt;*&lt;/role-name&gt;
            &lt;/auth-constraint&gt;

            &lt;/security-constraint&gt;
                &lt;login-config&gt;
                &lt;auth-method&gt;${web.modules.auth.type}&lt;/auth-method&gt;
                &lt;realm-name&gt;MyRealm&lt;/realm-name&gt;
            &lt;/login-config&gt;

        &lt;security-constraint&gt;
    </test.security.config>
</properties>

в вашем web.xml

....
${test.security.config}
....

Поскольку несуществующие свойства оцениваются как пустая строка, ваши конфигурации, для которых это свойство не установлено (или свойство является пустым тегом xml) здесь будет пустая строка.

Это некрасиво, и xml трудно изменить в такой форме. Однако, если ваш web.xml сложный и вы представляете больший риск рассинхронизации 4-5 копий web.xml, это может быть подход, который вам подойдет.

19
ответ дан 7 November 2019 в 09:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: