【问题标题】:Ajax request from jax-rs web service来自 jax-rs Web 服务的 Ajax 请求
【发布时间】:2018-04-28 09:11:35
【问题描述】:

从我的 tomcat 网络服务发送一个发布请求时,我收到如下错误: " 对预检请求的响应未通过访问控制检查:请求的资源上不存在 'Access-Control-Allow-Origin' 标头。因此不允许访问 Origin 'null'。"

我正在使用 tomcat 9.* 并使用 jax-rs java web api 开发了我的 web 服务。

虽然我用邮递员测试了我的网络服务,但我的网络服务得到了很好的响应(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)); 
    }'

【问题讨论】:

    标签: jquery ajax web-services tomcat jax-rs


    【解决方案1】:

    您说“我尝试启用 CORS 过滤器并尝试发送 get 工作正常的请求。”

    您的意思是 GET 方法有效但 POST 无效?如果是这样,您必须在您的 REST 服务/终端以及这些设置上允许它 标头(“访问控制允许来源”,“*”) header("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)); 
        }'
    

    【讨论】:

      猜你喜欢
      • 2017-04-29
      • 1970-01-01
      • 1970-01-01
      • 2014-02-04
      • 2014-06-20
      • 2016-08-01
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多