【问题标题】:Apache Tomcat and CORSApache Tomcat 和 CORS
【发布时间】:2012-08-22 09:01:58
【问题描述】:

我正在使用服务器,并且正在尝试执行跨域脚本。

我尝试添加 http://software.dzhuvinov.com/cors-filter-installation.html 并将 java 文件放在 .../tomcat/lib/ 中(以及 .../tomcat/webapps/MYAPP/WEB-INF/lib/ 因为它不是t 工作)并已修改 web.xml 以包含...

<servlet>
    <description>Desciption</description>
    <display-name>Displayname</display-name>
    <servlet-name>myservlet</servlet-name>
    <servlet-class>java.path</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>myservlet</servlet-name>
    <url-pattern>/wsdl</url-pattern>
</servlet-mapping>
<filter>
     <filter-name>CORS</filter-name>
     <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class> 
</filter>

<filter-mapping>
    <filter-name>CORS</filter-name>
    <servlet-name>myservlet</servlet-name>
</filter-mapping>

然后我重新启动网络服务器。

我无法让 Access-Control-Allow-Origin 工作。我不断收到 403 错误。

我想我一定没有正确遵循网站上的 3 个步骤。任何想法如何使它工作?

谢谢。

Edit1:我在此调用之前将我的 url 和我的 soap 消息声明为 url 和 soapMessage。我确信它们都很好,因为它们在soapUI中工作正常。

电话是:

$.ajax({ 
    type: "POST",
        url: url,
        dataType: "xml",
        contentType: "text/xml",
        //crossDomain: true, 
        data: soapMessage,
        //xhrFields: {
        //  withCredentials: true
        //},
        success: function(data){ 
            var xml = data.xml;
            console.log("Success!");
            console.log(xml);
            //[do something with the xml] 
        }, 
        error: function(data){ 
            var xml = data.xml;
            console.log("Error!");
            console.log(xml);
            //[do something with the xml] 
        }, 
        complete: function(data){ 
            var xml = data.xml;
            console.log("Complete!");
            console.log(xml);
            //[do something with the xml] 
        }

我一直在尝试不同的领域,但运气不佳。我不确定它是否值得注意,但是当我不包含 dataType 时,响应标头指示我想要查看的 Access-Control-Allow-Origin 并返回 415 错误(不支持媒体类型)。

示例请求标头:

OPTIONS /servlet/wsdl?wsdl HTTP/1.1
Host: otherserver:8080
Connection: keep-alive
Access-Control-Request-Method: POST
Origin: thiswebpage.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.83 Safari/537.1
Access-Control-Request-Headers: origin, content-type, accept
Accept: */*
Referer: thiswebpage.com/thisForm.cfm
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3

示例响应标头:

HTTP/1.1 403 Forbidden
Server: Apache-Coyote/1.1
Content-Type: text/plain
Content-Length: 86
Date: Tue, 28 Aug 2012 13:12:04 GMT

还有其他过滤器(web.xml 文件很大),但唯一可能影响事物的是这些。我需要去创建文件的公司,因为我的老板可能不让我碰这些(我只是实习生)。

<filter>
    <filter-name>agentSecurityModeFilter</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
    <filter-name>agentSecurityModeFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

我不确定他们在这里做什么...看来他们将相同的过滤器两次添加到具有不同名称的相同 url 模式中。

再次感谢!

【问题讨论】:

  • 您能否包含一个示例 http 请求和响应,以及您如何发出请求的代码 sn-p?是否安装了其他过滤器? 403 听起来像是一个可能的身份验证错误,这意味着请求可能会被其他过滤器拒绝。
  • 我进行了一些编辑以包含您提出的问题。我即将阅读他们在static.springsource.org/spring/docs/1.2.x/api/org/… 上的另一个过滤器,看看它是否可能是问题所在。感谢您的评论。
  • 你确定没有使用 Spring 1.2?这真的老了。
  • 这个问题你解决了吗?

标签: tomcat wsdl


【解决方案1】:

您是否尝试通过以下方式配置 CORSFilter?

<filter>
    <filter-name>CORS</filter-name>
    <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>

    <init-param>
            <param-name>cors.allowOrigin</param-name>
            <param-value>thiswebpage.com</param-value>
    </init-param>
</filter>

【讨论】:

    猜你喜欢
    • 2013-12-18
    • 2015-07-22
    • 2016-07-09
    • 2015-03-15
    • 2014-04-26
    • 2020-02-26
    • 1970-01-01
    • 2011-01-15
    相关资源
    最近更新 更多