Tomcat 8.5 - Ошибка 403 Запрещенные или пустые параметры в запросе POST - PullRequest
0 голосов
/ 19 февраля 2019

Мое веб-приложение состоит из HTML-страницы, которая передает данные сервлету Java, который генерирует из него файл PDF.При локальном тестировании и тестовом сервере все работало нормально, но поскольку я использую производственный сервер, который сопоставлен с зарегистрированным поддоменом вместе с сертификатом и использованием https, я получил ошибку 403 - Forbidden You don't have permission to access /Project/servlet on this server.HTML будет включен в другой веб-сайт на компьютере, отличном от сервера Tomcat.

Как я могу разрешить доступ к сервлету?

Редактировать: я пыталсяотправить форму через JavaScript, это дает мне не ошибку 403, а код состояния 200, но отправляет пустое тело запроса - без параметров, что довольно бесполезно.

let xhr = new XMLHttpRequest();
const url = serverpath + "/servlet";
 xhr.onreadystatechange = function() {
    if (xhr.readyState === 4) {
        window.open(xhr.response);
    }
}

xhr.open("POST", url, true);
xhr.setRequestHeader('Content-Type', 'application/json');

xhr.send(JSON.stringify({
    value1: "1",
    value2: "2",
    value3: "3"
 }));

При использовании вместо xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8'); и отправкеформа xhr.send('value1='1'&value2='2'+'&value3='3'); возвращается с ошибкой 403 Запрещено.

Вот мой web.xml проекта:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
    id="WebApp_ID" version="3.1">
    <display-name>StaticsCalculator</display-name>
    <welcome-file-list>
        <welcome-file>html/htmlpage.html</welcome-file>
        <welcome-file>servlet</welcome-file>
    </welcome-file-list>
<filter>
        <filter-name>CorsFilter</filter-name>
        <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
        <init-param>
            <param-name>cors.allowed.origins</param-name>
            <param-value>*</param-value>
        </init-param>
        <init-param>
            <param-name>cors.allowed.methods</param-name>
            <param-value>GET,POST,HEAD,OPTIONS,PUT</param-value>
        </init-param>
        <init-param>
            <param-name>cors.allowed.headers</param-name>
            <param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers</param-value>
        </init-param>
        <init-param>
            <param-name>cors.exposed.headers</param-name>
            <param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value>
        </init-param>
        <init-param>
            <param-name>cors.preflight.maxage</param-name>
            <param-value>10</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CorsFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <context-param>
        <param-name>log4jConfiguration</param-name>
        <param-value>logging.xml</param-value>
    </context-param>
</web-app>

1 Ответ

0 голосов
/ 02 июля 2019

Это случилось и со мной.Для почтового запроса Мой запрос был таким:

{ url:url, method: 'POST', dataType : 'json', }

В одном из экземпляров Tomcat возникла ошибка 403.

После добавления data и contentType он начал работать правильно.

{ url:url, method: 'POST', contentType:'application/x-www-form-urlencoded', dataType : 'json', data:'', }

Мой URL содержит параметры запроса.То, что я считаю, 403 запрещенного прихода в этом случае связано с конфигурацией tomcat, потому что для меня это работало на моем локальном компьютере, но у меня были проблемы с другим экземпляром tomcat.

...