javascript - 允许并配置访问控制允许来源

标签 javascript spring jakarta-ee cors cross-domain

我需要允许访问我网站的页面以接受来自其他网站的跨域请求。

我知道这种技术是跨源跨域CORS(跨源资源共享),我见过几个主题说一下:

How to call a page from another domain to my domain using ajax/javascript
How does Access-Control-Allow-Origin header work?
https://www.html5rocks.com/en/tutorials/cors/

但我不知道如何配置我的网站以允许跨域查询。

信息:需要访问我的网站不使用浏览器扩展,所以我必须练习跨域。

问题:

1. 如何配置 Access-Control-Allow-Origin header ?我的网站是 Java-EEJSFSpring

2.我找到了两种允许外部网站拥有我的页面内容的解决方案:

  • A) 第一个解决方案是一个 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) 第二种解决方案是外部站点使用 XMLHttpRequestAJAX 请求来加载我网站的页面: Embed an External Page Without an Iframe?

    最佳解决方案是什么(AB)?页面内容会静态加载吗?

3. 站点配置中是否有文件允许我授权或禁止站点(域)访问我的站点页面? Access-Control-Allow-Origin Multiple Origin Domains?

示例

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>

关于javascript - 允许并配置访问控制允许来源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43997043/

相关文章:

java - Spring MVC 应用程序中的 404 错误

java - 为什么我无法访问这个放入 Model 对象的列表到这个 Spring MVC 项目中?

java - 通过通用接口(interface)将 EJB 注入(inject)列表

java - 错误 : Expected session attribute 'form'

javascript - CSS 网格在下一个页面 View 中被破坏

javascript - Gridstack.js 从 JSON 获取位置

javascript - 设置多个 slider onchange 函数并更改变量

java - 如何在 Java 中锁定和解锁 URL

java - Spring JPA 不在更新时验证 bean

javascript - 如何防止预设的 INPUT 值被更改?