Почему Ant возвращает 403 при развертывании? - PullRequest
8 голосов
/ 19 августа 2011

Я пытаюсь развернуть файл войны в Tomcat 7. Это дает мне следующую ошибку.

deploy:
   [echo] Deploying on Tomcat.

BUILD FAILED
   C:\Users\coder\workspace\projectName\build.xml:84: java.io.IOException: Server returned    
   HTTP response code: 403 for URL: http://localhost:8090/manager/deploy?path=%2FprojectName

Вот мой файл сборки

<project name="ProjectName" default="main"
                basedir=".">

                <!-- Tell ant to use my environment variables -->
                <property environment="env"/>

                <property file="./build.properties"/>
                <property name="username" value="someUsername"/>
                <property name="password" value="somePassword"/>

                <taskdef name="deploy"    classname="org.apache.catalina.ant.DeployTask"/>

                <property name="tomcat.home"
                value="${env.CATALINA_HOME}"/>
                <property name="hibernate.home"
                value="${env.CATALINA_HOME}"/>
                <property name="servlet.jar"
                value="${tomcat.home}/common/lib/servlet-api.jar"/>
                <property name="jsp.jar"
                value="${tomcat.home}/common/lib/jsp-api.jar"/>
                <property name="hibernate.jar" value="C:/hibernate-distribution-3.6.4.Final/hibernate3.jar"/>

                <property name="deploy.dir"
                value="${tomcat.home}/webapps"/>
                <property name="build.compiler" value="modern"/>
                <property name="build.dir" value="build" />
                <property name="src.dir" value="src"/>
                <property name="war.file" value="projectName"/>
                <property name="war.file.name" value="${war.file}.war"/>

                <path id="project.class.path">
                <fileset dir="./WEB-INF/lib/">
                <include name="**/*.jar"/>
                </fileset>
                <pathelement path="${src.dir}"/>
                <pathelement path="${servlet.jar}"/>
                <pathelement path="${jsp.jar}"/>
                <pathelement path="${hibernate.jar}"/>
                </path>

                <target name="clean">
                <delete dir="${build.dir}" includeEmptyDirs="true" />
                </target>

                <target name="prep">
                <mkdir dir="${build.dir}"/>
                </target>

                <target name="compile">
                <javac srcdir="${src.dir}"
                destdir="${build.dir}"
                debug="on"
                deprecation="on">
                <include name="**/*.java"/>
                <classpath refid="project.class.path"/>
                </javac>
                </target>

                <target name="cleanWebApp">
                <delete file="${deploy.dir}/${war.file.name}" />
                <delete dir="${deploy.dir}/${war.file}"
                includeEmptyDirs="true" />
                </target>

                <target name="war">
                <war warfile="${war.file.name}"
                webxml="./WEB-INF/web.xml">
                <fileset dir="./" includes="**/*.*" excludes="*.war,
                **/*.nbattrs, web.xml, **/WEB-INF/**/*.*,
                **/project-files/**/*.*"/>
                <webinf dir="./WEB-INF" includes="**/*"
                excludes="web.xml, **/*.jar, **/*.class"/>
                <lib dir="./WEB-INF/lib"/>
                <classes dir="${build.dir}"/>
                <classes dir="${src.dir}">
                <include name="**/*.properties"/>
                </classes>
                </war>
                </target>

                <target name="deploy">
                    <echo message="Deploying on Tomcat." />
                    <deploy url="http://localhost:8090/manager" username="someUsername"
                     password="somePassword" path="/projectName" war="./${war.file.name}" />
                </target>

                <target name="main" depends="clean, prep, cleanWebApp,
                compile, war, deploy"/>

                </project>

Ответы [ 5 ]

15 голосов
/ 27 сентября 2011

Учетная запись, указанная в manager.username и manager.password, должна быть в роли «manager-script» (или «admin-script» также, если это не работает).

Кажется, что роли "manager" и "admin" изменены на "manager-gui", "admin-gui", "manager-script" (для текстового подключения), "admin-script" (для текстового подключения) в Tomcat 7.

Я нашел 4 роли, относящиеся к менеджеру, на странице ошибки ниже:

403 Доступ запрещен

У вас нет прав для просмотра этой страницы.

Если вы уже настроили приложение «Диспетчер» для разрешения доступа и использовали кнопку «Назад» в браузерах, использовали сохраненную закладку или подобное, значит, вы могли активировать защиту от подделки межсайтовых запросов (CSRF) для HTML-интерфейса приложения Manager. Вам нужно будет сбросить эту защиту, вернувшись на главную страницу диспетчера. Вернувшись на эту страницу, вы сможете продолжить использовать HTML-интерфейс приложения Manager в обычном режиме. Если вы продолжаете видеть это сообщение об отказе в доступе, убедитесь, что у вас есть необходимые разрешения для доступа к этому приложению.

Если вы не изменили какие-либо файлы конфигурации, проверьте файл conf / tomcat-users.xml в вашей установке. Этот файл должен содержать учетные данные, позволяющие использовать это веб-приложение.

Например, чтобы добавить роль manager-gui для пользователя с именем tomcat с паролем s3cret, добавьте следующее в конфигурационный файл, указанный выше.

Обратите внимание, что для Tomcat 7 и более поздних ролей, необходимых для использования приложения менеджера, были изменены с одной роли менеджера на следующие четыре роли. Вам нужно будет назначить роли, необходимые для функций, к которым вы хотите получить доступ.

manager-gui - разрешает доступ к HTML-интерфейсу и страницам состояния

manager-script - разрешает доступ к текстовому интерфейсу и страницам состояния

manager-jmx - разрешает доступ к прокси JMX и страницам состояния

manager-status - разрешает доступ только к страницам статуса

Интерфейс HTML защищен от CSRF, а интерфейс для текста и JMX - нет. Для поддержания защиты CSRF:

Пользователям с ролью manager-gui не следует назначать роли manager-script или manager-jmx. Если доступ к текстовым интерфейсам или интерфейсам jmx осуществляется через браузер (например, для тестирования, поскольку эти интерфейсы предназначены для инструментов, а не людей), то после этого браузер должен быть закрыт, чтобы завершить сеанс. Для получения дополнительной информации, пожалуйста, смотрите приложение Manager HOW-TO.

7 голосов
/ 21 января 2014

Базовый URL, который вы должны использовать, должен быть: http://localhost:8090/manager/text

3 голосов
/ 19 августа 2011

Вы получаете сообщение об отказе в доступе.

Это возможно, потому что либо ваше имя пользователя или пароль неверны, либо вы не добавили роли правильно.

Вот реклама из документации Tomcat -

Конфигурация Apache Tomcat 6.0 Realm Как написать: Если вы хотите использовать Диспетчер приложений для развертывания и отмены развертывания приложений в Запустив установку Tomcat, вы ДОЛЖНЫ добавить роль «менеджер» в хотя бы одно имя пользователя в выбранной вами реализации Realm. Это потому что сам менеджер веб-приложения использует ограничение безопасности это требует роли «менеджер» для доступа к любому запросу URI в этом применение.

Надеюсь, это поможет.

0 голосов
/ 11 декабря 2013

Я недавно столкнулся с этой ошибкой, и ни один из этих подходов не помог мне.

Решение было явно записать роли в tomcat-users.xml:

<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<user name="admin" password="admin" roles="admin-gui,admin-script,manager-gui,manager-script"/>

Роли admin-gui и admin-script не требуются для запуска скрипта, они нужны мне для использования этого пользователя для администрирования tomcat в веб-интерфейсе.

0 голосов
/ 15 октября 2013

У меня была та же проблема с Tomcat 6, но все приведенные выше решения мне не помогают.Поэтому я исправил это, добавив дополнительную роль («менеджер») пользователю в tomcat-users.

<user username="tomcat" password="tomcat" roles="tomcat,manager-gui,manager"/>
...