gpt4 book ai didi

java - 如何使用 spring 和 jquery 设置真正的跨域策略

转载 作者:搜寻专家 更新时间:2023-11-01 00:51:33 24 4
gpt4 key购买 nike

我是网络开发的菜鸟,在网络上苦苦挣扎之后,我找到了解决方案。我分享它是因为我觉得它没有很好的文档记录并且可以被其他人使用,并且因为我需要一些反馈。

我想授予特定域访问 API 的权限。

首先,我尝试设置请求的 header ,但由于两个原因它根本不起作用。

第一个原因是我不允许在 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>

第二个原因是我试图设置“access-control-allow-origin” header ,但它没有用。像这样的任何自定义 header 都会被忽略。实际上,服务器不需要那种类型的任何东西,他的默认行为允许我获得调用的来源(域),我能够在过滤器中处理它,如下所示:

    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="*"

也许只说“Access-Control-Allow-Origin”。然后我看到有一个“安全”属性,但我不知道如何处理它。

我已经拥有的代码也有问题:

    <!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/)。如果我们无法在服务器端获取 header ,为什么 jQuery 需要设置 header ?另外,它有两种“提供” header 的方法:使用“beforeSend”和“headers”。这 2 点对我来说没有意义,正如您在上面看到的那样,最终让我白白浪费了很多时间!

预先感谢您的回复!

最佳答案

与其考虑如何允许特定域访问您的 api,也许这些其他域应该以不同的方式访问您的 api。

如果其他域从那里的 Web 服务器而不是他们的客户端发出 Web 请求,您根本不必担心跨域脚本。

其他域的客户端可以发布到它自己的网络服务器,向您的服务器发出网络请求并将结果传回给他们的客户端。

此外,如果您担心安全性,有很多方法可以保护您的 api,而无需维护具有访问权限的域列表。

关于java - 如何使用 spring 和 jquery 设置真正的跨域策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13454719/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com