`
yixibo
  • 浏览: 185516 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

分布式系统跨域调用问题

 
阅读更多

     在分布式系统中, 大部分在后台做远程调用, 从hession,到dubbo、dubbox , spring cloud 等,所以前台感觉不到跨域问题, 但是有些特殊要求,需要做前端远程调用

从A系统调用B系统页面,在这里不考虑权限问题 ,因为某些系统单点、授权等方式。

调用方式:

 1、ajax ,

   大部分人用jquery 做为基础框架,那么以jquery 为基础。

直接使用ajax 是不允许跨域 ,报错调用端不允许,那么怎么解决?

首先在调用ajax 增加头部,如下

$.ajax({
             url: href,
             type: "GET",
             dataType:"html",
             beforeSend: function (xhr) {
                 xhr.setRequestHeader("content-type", "web");
                xhr.setRequestHeader("Access-Control-Allow-Origin", "*");
             },
             success: function(data,status){
                 //On ajax success do this
                 console.info("load page "+href+" is success.");
                 renderTable(data);
             },
             error: function(xhr, ajaxOptions, thrownError) {
                 //On error do this
                 console.info("error."+ajaxOptions+",status:"+xhr.status+","+thrownError);
                
             }
           });

这样是允许了调用界面能发出ajax请求,那接收端也要增加对应的回应。

一般如果某个系统需要支持跨域 ,只要增加一个过滤器配置即可,过滤器内容如下

写道
import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class CrossDomainFilter implements Filter {

@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain filterChain) throws IOException, ServletException {
// 强制类型转换
HttpServletRequest request = (HttpServletRequest) arg0;
HttpServletResponse response = (HttpServletResponse) arg1;
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
/*
解决引用出现跨域问题
glyphicons-halflings-regular.woff
glyphicons-halflings-regular.ttf
*/
//跨域设置-start
final String origin = request.getHeader("origin");
if (origin!=null && origin.trim().length()>0) {
response.setHeader("Access-Control-Allow-Origin", origin);
} else {
response.setHeader("Access-Control-Allow-Origin", "*");
}
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Allow-Methods", "OPTIONS,GET,PUT,POST,DELETE,HEAD");
response.setHeader("Access-Control-Max-Age", "2592000");
response.setHeader("Access-Control-Allow-Headers","content-type,access-control-allow-origin,access-control-request-headers,access-control-request-method,accept,origin,authorization,x-requested-with,serviceName,locale");
//跨域设置-end

//放行、将请求转发到目的地
filterChain.doFilter(request, response);
}

@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
@Override
public void destroy() {
// TODO Auto-generated method stub
}
}

 

然后在, web.xml 中增加过滤配置

<!-- 支持跨域 -->
    <filter>
  <filter-name>crossDomainFilter</filter-name>
  <filter-class>org.smartsoft.core.servlet.CrossDomainFilter</filter-class>
 </filter>
 <filter-mapping>
  <filter-name>crossDomainFilter</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>

 

  好了,这样就可以A 系统界面访问B系统了。

 提示,如果调用的B系统没有支持跨域 ,那么这种方式失效!

 2、窗体

 无论使用IFrame还是使用 href + target ="_blank" 弹新界面方式,都可以直接调用B界面内容就行了。

所以这是一种很安全的方式,很多插件跨域方式就是使用隐藏的iframe 加载B界面,再用javascript 回写出来。

 3、script 方式

  网传最著名的 ajax 使用jsonp 方式,就是使用script 方式,原理是动态将要加载界面连接在A界面上写个script 标签,连接为javascript 内容,然后等加script 加载完后,再调用。这种方式适合B界面是纯javascrpt 或json 数据。如果是界面html ,xml 就不适用。

 

 

以上是目前用得最多的前端跨域 调用。新的html5 如果是仅仅A,B界面通信 ,那使用postmessage 方式即可。

 

分享到:
评论

相关推荐

    JS跨域调用WCF服务实例(WCF服务宿主到控制台)

    JavaScript(JS)与Windows Communication Foundation(WCF)服务之间的跨域调用是Web开发中常见的需求,尤其是在构建分布式系统和前后端分离的应用时。本文将详细介绍如何实现JS跨域调用WCF服务,并通过一个控制台...

    大型分布式web系统的跨域请求方案研究.pdf

    【大型分布式Web系统的跨域请求方案研究】 随着大数据和互联网技术的快速发展,大型分布式Web系统已经成为常态,这类系统...同时,理解这些跨域请求方案的工作原理和优缺点,对于构建高效、健壮的分布式系统至关重要。

    Windows 2000 Server资源大全 第5卷 分布式系统

    最后,Windows 2000 Server的系统管理工具,如事件查看器、性能监视器和系统日志,为分布式系统的监控和诊断提供了便利,帮助管理员及时发现和解决问题。 综上所述,《Windows 2000 Server资源大全》第五卷详细讲解...

    跨域上传文件,多服务器相互调用

    它们涉及到跨域策略、前端与后端通信、分布式系统设计等多个方面,理解并掌握这些知识点对于构建高效、稳定的网络应用至关重要。在实际开发中,应根据项目需求和团队技术栈选择合适的方法和技术。

    WCF服务宿主及其跨域问题解决实例

    在分布式系统开发中,Windows Communication Foundation (WCF) 是Microsoft提供的一种强大的服务导向架构,用于构建高度互操作的服务。本实例主要探讨的是如何在Silverlight应用程序中调用WCF服务,以及解决由此产生...

    springboot集成debbo分布式系统案例.zip

    Debbo提供了服务注册与发现、负载均衡、熔断机制、服务调用跟踪等一系列功能,帮助开发者构建高可用、高性能的分布式系统。 在集成Debbo的过程中,以下是一些核心知识点: 1. **服务注册与发现**:Debbo通过...

    asp.net基于JWT的web api身份验证及跨域调用实践

    在当今互联网技术的快速发展下,Web API 成为了构建分布式系统和服务间交互的主要方式之一。开发者们常常需要处理身份验证和跨域资源共享(CORS)的问题。本文将介绍使用 JWT(JSON Web Tokens)在 *** 中实现 Web ...

    面向分布式系统集成的Web服务管理方案.pdf

    文章提出了一个面向分布式系统集成的Web服务管理方案,该方案针对当前我国企业普遍面临的分布式应用集成难题,尤其在SQA(软件质量保证)架构下对Web服务资源共享管理和跨域访问安全控制问题提供了有效的解决方案。...

    C.net环境下分布式系统的Remoting技术实现

    在C# .NET环境下,分布式系统的Remoting技术实现是一个关键的课题,特别是在互联网技术迅猛发展的背景下,传统的集中式计算和客户/服务器模型已无法满足跨平台、跨地域的分布式计算需求。构建一个可扩展、高复用性且...

    silverlight wcf 跨域访问 内含WORD图解和跨域文件

    总的来说,这份资料包提供了一套完整的解决方案,包括理论解释、图形说明和实际配置文件,帮助开发者克服Silverlight和WCF跨域访问的障碍,从而更顺畅地构建分布式系统。通过深入学习和实践这些内容,你可以更好地...

    Dubbox跨域请求、Cookie设置

    在分布式系统中,尤其是微服务架构中,各个服务可能部署在不同的域名下,这就需要解决跨域请求的问题。Dubbox可以通过配置CORS(Cross-Origin Resource Sharing,跨源资源共享)来允许来自不同源的请求。 CORS的...

    借助于网上messenger.js完成可以跨域的Html嵌套调用

    然而,在某些场景下,例如前后端分离的架构或者分布式系统中,我们需要打破这一限制,实现跨域通信。本主题将详细探讨如何利用名为“messenger.js”的第三方库来解决这个问题,以及如何在HTML页面中进行嵌套调用。 ...

    wcf 跨域 post方式

    在IT行业中,Windows Communication Foundation(WCF)是微软提供的一种用于构建分布式系统的服务模型,它允许服务提供商和消费者之间进行安全、可靠的数据交换。当涉及到跨域通信时,通常会遇到浏览器的同源策略...

    分布式条件下的远程服务调用[参考].pdf

    在分布式系统中,服务是作为独立的、可重用的IT资源提供,它们通过标准化的访问协议进行交互,使得服务请求者无需关心服务提供者的具体实现细节。这种解耦合的设计大大提高了系统的灵活性和可维护性。 常见的分布式...

    分布式调用跟踪与监控实战

    当前,随着互联网架构的扩张,分布式系统变得日趋复杂,越来越多的组件开始走向分布式化,如微服务、消息收发、分布式数据库、分布式缓存、分布式对象存储、跨域调用,这些组件共同构成了繁杂的分布式网络。...

    JS跨域APACHE配置

    然而,这在进行前后端分离、API调用或者分布式系统开发时,可能会造成不便,因为不同的域名或端口被视为不同的源。为了解决这个问题,开发者需要进行跨域配置。本文将详细介绍如何在Apache服务器上配置跨域策略,...

    ASP.NET跨域SSO解决方案

    2. **客户端应用程序集成**:各子系统通过API调用方式接入中心认证服务器,实现基于Token的身份验证。 3. **跨域资源共享**:通过配置合适的CORS(Cross-Origin Resource Sharing)策略,允许特定来源的请求访问资源...

    bboss mvc 通过jsonp实现跨站跨域远程访问

    然而,为了实现前后端分离或者分布式系统中的数据交互,开发者常常需要突破这一限制。 JSONP是一种规避同源策略的方法,它的工作原理是通过在HTML中动态插入`&lt;script&gt;`标签,其`src`属性指向服务端提供的URL,该URL...

    问题代码 Silverlight调用控制台宿主WCF Demo

    而WCF(Windows Communication Foundation)是微软提供的一种全面的面向服务的通信框架,用于构建分布式系统中的服务。在本案例中,"问题代码 Silverlight调用控制台宿主WCF Demo"涉及的是一个Silverlight客户端尝试...

Global site tag (gtag.js) - Google Analytics