Ошибка заголовка CORS , когда я использую ajax-запрос с моего интерфейса для доступа к базе данных в Tomcat, maven

#java #maven #tomcat

Вопрос:

Поэтому я создал этот ресурс, который возвращает массив продуктов.

 public class MyResource {

    /**
     * Method handling HTTP GET requests. The returned object will be sent
     * to the client as "text/plain" media type.
     *
     * @return String that will be returned as a text/plain response.
     */
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public Object getbook()
    {
        Products p = new Products();
        
        
        Gson gson = new GsonBuilder().create();
        return gson.toJson(p.getAll());
    }
 

Но когда я вызываю этот api из своего интерфейса, он говорит
Доступ к XMLHttpRequest по адресу ‘http://localhost:8085/demoRest/webapi/myresource» от происхождения «http://localhost:8083» заблокирован политикой CORS: на запрошенном ресурсе отсутствует заголовок «Управление доступом-Разрешить-Происхождение».

вот мой запрос ajax

 $(function() {
var val = "";
$("#submit").click(function(event){
    event.preventDefault();

    $.ajax({
        type: "GET",
        dataType:"json",
        url:  "http://localhost:8085/demoRest/webapi/myresource",
        success: function(data) {
            console.log("response:"   data);
            //$.each(data, function(j, pdata) {
              //  val= val   "[ " pdata.title  " "   pdata.author  "]";
           // });
           // $("#data").text(val);
        },
        error: function(jqXHR, textStatus, errorThrown) {
            console.log(' Error in processing! ' textStatus);
        }
    });
});
});

 

Мой Webxml

 <servlet>
        <servlet-name>Jersey Web Application</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>com.demoRest</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Jersey Web Application</servlet-name>
        <url-pattern>/webapi/*</url-pattern>
    </servlet-mapping>
 

Использование tomcat версии 10

Ответ №1:

Так что, я думаю, вам следует узнать о политике CORS.

https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS

Пользователь заблокирует запрос, если вы используете XMLHttpRequest с хоста A на хост B без разрешения Хоста B.

Однако мы можем передать CORS, добавив несколько заголовков на хосте B. Серверный api часто использует эту политику для обработки множества различных запросов, поступающих с разных хостов.

Вы можете привести пример здесь:

 ((HttpServletResponse) servletResponse).addHeader("Access-Control-Allow-Origin", "*");
((HttpServletResponse) servletResponse).addHeader("Access-Control-Allow-Methods","GET, OPTIONS, HEAD, PUT, POST");
 

Более подробно:

https://howtodoinjava.com/java/servlets/java-cors-filter-example/