我是一个web开发的菜鸟,在经过很多网络挣扎后,我找到了一个解决方案。 我分享它,因为我觉得它没有很好的记录,可以被其他人使用,因为我需要一些反馈。如何使用spring和jquery设置一个真正的跨域策略
我想给特定域访问API。
首先,我尝试设置请求的标题,但由于两个原因它根本不起作用。
第一个原因是,我没有允许它的crossdomain.xml:
<cross-domain-policy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.adobe.com/xml/schemas/PolicyFile.xsd">
<allow-http-request-headers-from domain="domain1WithoutSlashAtTheEnd" headers="*"/>
<allow-http-request-headers-from domain="domain2WithoutSlashAtTheEnd" headers="*"/>
</cross-domain-policy>
的第二个原因是,我试图设置“访问控制允许来源”标头,同时它也没用。任何这样的自定义标题都会被忽略。 实际上,服务器并不需要那样的东西,他的默认行为让我得到我能够处理它在过滤器中调用的原点(域)如下:
String origin = hsRequest.getHeader("Origin");
if (allowedDomainList.contains(origin)) {
hsResponse.setHeader("Access-Control-Allow-Origin", origin);
} else {
throw new SomeException("domain not allowed");
}
其中“ allowedDomainList“是一个字符串列表,其中我给了我允许访问我的API的所有域。 它似乎工作正常。 您对此有何看法? 你是否有更具体的了解:
headers="*"
也许只说“访问控制允许来源”。然后我看到有一个“安全”属性,我不知道该如何处理它。
我也有代码我已经有一个问题:
<!DOCTYPE cross-domain-policy
SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="*" />
</cross-domain-policy>
我不知道它如何与我的政策的行为地干扰。 它似乎没有影响,但crossdomain.xml对我来说很不清楚。
最后一点是关于jQuery(http://api.jquery.com/jQuery.ajax/)。为什么jQuery有一些东西来设置标题,如果我们无法在服务器端获取它们?另外,它有两种“给予”标题的方式:使用“beforeSend”和“标题”。这两点对我来说没有意义,正如你上面所看到的那样,这让我失去了很多时间,最终没有任何东西!
在此先感谢您的答复!
如果你在iFrames之间进行通信而不关心IE6和7,你可以使用新的'postMessage()'。 https://developer.mozilla.org/en-US/docs/DOM/window.postMessage –
String origin = hsRequest。getHeader( “源”); \t \t \t如果(allowedDomainList.contains(原点)){ \t \t \t \t hsResponse.setHeader( “访问控制允许来源”,原点); \t \t \t} else { \t \t \t \t return; \t \t \t} – user1835565
以上是我自己的更正。仍在测试。 我不想使用iframe,我希望外部域对他的代码100%负责。我只是提供服务器功能。 – user1835565