我需要允许访问我的网站的某个页面才能接受来自其他网站的跨域请求。
我知道这种技术是跨源或跨域或CORS(跨域资源共享),我见过几个主题谈到它:
如何使用 ajax/javascript 将页面从另一个域调用到我的域
Access-Control-Allow-Origin 标头如何工作?
https://www.html5rocks.com/en/tutorials/cors/
但是我不知道如何将我的站点配置为允许跨域查询。
信息:需要访问我的网站不使用浏览器扩展,所以我必须练习跨域。
问题:
1.如何配置Access-Control-Allow-Origin
标头?我的网站是Java-EE
,JSF
和Spring
。
2.我找到了两种解决方案来允许外部网站包含我的页面内容:
-
答:第一个解决方案是一个javascript脚本,它生成一个指向我的页面的链接。然后,外部站点必须在其页面中包含此链接才能显示我的页面的内容。(我应该还有
Access-Control-Allow-Origin
吗?
例
<script>
(function (w,i,d,g,e,t,s)
w[d] = w[d]||[];
t= i.createElement(g);
t.async=1;
t.src=e;
s=i.getElementsByTagName(g)[0];
s.parentNode.insertBefore(t, s);
})(window, document,'_gscq','script','//widgets.getsitecontrol.com/42540/script.js');
</script>
B)第二种解决方案是外部站点使用
XMLHttpRequest
或AJAX
请求来加载我的站点的页面: 嵌入没有 iframe 的外部页面?什么是最佳解决方案(A或B)?页面内容是否会静态加载?
3.站点配置中是否有允许我授权或禁止站点(域)访问站点页面的文件? 访问控制允许源多个源域?
例
my_page_1.html: // Page of my site
// Authorize sites to make a cross domain query
external_site_1.com
external_site_2.com
external_site_3.com
my_page_2.html: // Page of my site
// Authorize sites to make a cross domain query
external_site_1.com
my_page_3.html: // Page of my site
// Authorize sites to make a cross domain query
external_site_1.com
external_site_3.com
提前感谢您的回答。
您可以使用不同的域定义多个过滤器:
<filter>
<filter-name>CorsFilter1</filter-name>
<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
<init-param>
<param-name>cors.allowed.origins</param-name>
<param-value>domain1</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CorsFilter1</filter-name>
<url-pattern>/path1/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>CorsFilter2</filter-name>
<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
<init-param>
<param-name>cors.allowed.origins</param-name>
<param-value>domain2, domain3</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CorsFilter2</filter-name>
<url-pattern>/path2/*</url-pattern>
<url-pattern>/path3/*</url-pattern>
</filter-mapping>