Ajax-запрос от веб-службы jax-rs - PullRequest
0 голосов
/ 28 апреля 2018

При отправке почтового запроса от моего веб-сервиса tomcat я получил сообщение об ошибке, как показано ниже: "Ответ на предварительный запрос не проходит проверку контроля доступа: в запрошенном ресурсе отсутствует заголовок« Access-Control-Allow-Origin ». Следовательно, исходному« null »запрещен доступ.»

Я использую tomcat 9. * и разработал свой веб-сервис с помощью jax-rs java web api.

Пока я тестировал свой веб-сервис с почтальоном, я получил хороший ответ от своего веб-сервиса (ответ http 200). Тем не менее, когда я попытался отправить ajax сообщение, я получил сообщение выше. Я попытался включить фильтр CORS и попытался отправить запрос на получение, который работает нормально.

web.xml:

    <filter>
    <filter-name>CorsFilter</filter-name>
    <filter-class>org.apache.catalina.filters.CorsFilter</filter-class> 
    </filter>
    <filter-mapping>
    <filter-name>CorsFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>FORWARD</dispatcher>
    </filter-mapping>'

функция сообщения jax-rs:

    @POST
    @Path("/users2")    
    @Consumes("application/json")
    @Produces(MediaType.APPLICATION_JSON)
    public Response SetAllTlcsStatus(List<TrafficLight> c){       
    System.out.println("You have entered the SetTlc function");
    return Response.ok() //200
            .header("Access-Control-Allow-Origin", "*")
            .header("Access-Control-Allow-Methods", "GET, POST, DELETE, 
    PUT")
            .allow("OPTIONS").build();
    }  

запрос Ajax:

    $.ajax({
    type : "POST",
    url : "http://localhost:8080/userManagement/rest/Traffic/users2",
    contentType :"application/json; charSet=UTF-8",
    data : d,
    dataType : "json",
    beforeSend: function (xhr){ 
        console.log('Before');
        xhr.setRequestHeader('Authorization', make_base_auth(user, pass)); 
    }'

1 Ответ

0 голосов
/ 28 апреля 2018

Вы говорите: «Я попытался включить фильтр CORS и попытался отправить get запрос, который работает нормально».

Вы имеете в виду, что метод GET работает, но POST нет? Если это так, вы должны разрешить это на вашем REST-сервисе / терминале, а также эти настройки заголовок («Access-Control-Allow-Origin», «*») заголовок («Access-Control-Allow-Methods», «GET, POST, DELETE, PUT»)

Наконец, если по какой-либо причине ваш AJAX по-прежнему возвращается неудачно, попробуйте

$.ajax({
    type : "POST",
    url : "http://localhost:8080/userManagement/rest/Traffic/users2",
    contentType :"application/json; charSet=UTF-8",
    data : d,
    dataType : "json",
**xhrFields: {
    withCredentials: true
},
crossDomain: true,**
beforeSend: function (xhr){ 
        console.log('Before');
        xhr.setRequestHeader('Authorization', make_base_auth(user, pass)); 
    }'
...