read方法中调用的response对象是父类BaseController的一个成员变量.

spring默认bean的生命周期Score为singleton单例模式.

当多线程并发使用同一bean, 并使用bean中的同一成员变量时会有问题. 比如下例中的成员变量response

以下是服务端跨域代码.

@Controller
@Scope("request")
@RequestMapping("/CrossDomain")
public class CrossDomainController extends BaseController { @RequestMapping("/read")
@ControllerLog(description = "跨域请求")
public void read(@RequestParam Map<String, Object> params) throws IOException {
String url = (String) params.get("url");
if(BlankUtil.isNotEmpty(url)) {
HttpClient httpClient = HttpClientBuilder.create().build();
HttpPost httpPost = new HttpPost(url);
// 设置请求的header
httpPost.addHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
// 设置请求的参数
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
for (String key : params.keySet()) {
nvps.add(new BasicNameValuePair(key, String.valueOf(params.get(key))));
}
httpPost.setEntity(new UrlEncodedFormEntity(nvps, "utf-8"));
// 执行请求
HttpResponse httpResponse = httpClient.execute(httpPost);
String result = EntityUtils.toString(httpResponse.getEntity(), "utf-8");
if("xml".equalsIgnoreCase(String.valueOf(params.get("type")))) {
response.setContentType("text/xml; charset=UTF-8");
}
try {
System.err.println("---------->" + String.valueOf(params.get("type")) + result.length());
PrintWriter out = response.getWriter();
out.write(result);
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
} }

修改Bean的生命周期scope配置为request或prototype即可.

JS代码(请求Java后台得到远程服务器xml文本内容,  然后在js端转换成xmldoc对象)

function crossDomainloadXmlFile(config) {
var doc = null;
Ext.Ajax.request({
url : config.url, // 请求地址
params : config.params, // 请求参数
timeout: config.timeout || 30000,
async : false,//同步请求
method : 'post', // 方法
callback : function(options, success, response) {
if(!success) {
if(top.checkTimeoutAndRelogin(response.status)) {
top.Ext.MessageBox.alert('错误提示', response.message);
}
return;
}
console.log('crossDomainloadXmlFile:' + response.responseText)
doc = parseXmlString(response.responseText);
}
});
return doc;
} function parseXmlString(xmlString) {
var doc;
if (window.ActiveXObject) {
doc = new ActiveXObject("Microsoft.XMLDOM");
doc.setProperty("SelectionLanguage", "XPath");
doc.async = false;
doc.loadXML(xmlString);
}
// load XML string code for Mozilla, Firefox, Opera, etc.
else {
var parser = new DOMParser();
doc = parser.parseFromString(xmlString, "text/xml");
} return doc.documentElement;
}

EXT组件:

/**
* Created by huangbaidong on 2016/6/30.
* 简单数据字典通用Store,
* 外部调用传入参数dictionaryId作为过滤条件.
* 使用案例:
store: Ext.create('app.component.sys.dictionary.SimpleDictionaryXmlStore', {
dictionaryId : 1
})
*/
Ext.define('app.component.sys.dictionary.SimpleDictionaryXmlStore', {
extend: 'Ext.data.XmlStore',
storeId :'simpleDictionaryStore',
dictionaryId : 0,
constructor : function(config) {
var me = this;
Ext.apply(config, {
fields: [{
name: 'id',
mapping: '@id'
}, {
name: 'name',
mapping: '@name'
}, {
name: 'dictionaryId',
mapping: '@dictionaryId'
}],
data:(function(){
var array = [];
Ext.each(top.simpleDictionaryStore.getData().items, function(item) {
if(item.data.dictionaryId == config.dictionaryId) {
array.push(item);
}
})
return array;
})()
});
app.component.sys.dictionary.SimpleDictionaryXmlStore.superclass.constructor.call(this, config);
}
});
/**
* 跨域获取数据字典, 并缓存为全局单例Store
* @type {Ext.data.Store}
*/
top.simpleDictionaryStore = Ext.create('Ext.data.Store', {
autoLoad : true,
fields: [{
name: 'id',
mapping: '@id'
}, {
name: 'name',
mapping: '@name'
}, {
name: 'dictionaryId',
mapping: '@dictionaryId'
}],
proxy: {
type: 'ajax',
url: '../CrossDomain/read',
reader: {
type: 'xml',
record: 'simpleDictionary',
idProperty: '@id',
totalRecords: '@total'
},
extraParams:{//服务端跨域处理
url: DICTIONARY_URL,
type : 'xml'
}
}
});

spring ext 跨域的更多相关文章

  1. spring boot跨域请求访问配置以及spring security中配置失效的原理解析

    一.同源策略 同源策略[same origin policy]是浏览器的一个安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源. 同源策略是浏览器安全的基石. 什么是源 源[orig ...

  2. SpringBoot 优雅配置跨域多种方式及Spring Security跨域访问配置的坑

    前言 最近在做项目的时候,基于前后端分离的权限管理系统,后台使用 Spring Security 作为权限控制管理, 然后在前端接口访问时候涉及到跨域,但我怎么配置跨域也没有生效,这里有一个坑,在使用 ...

  3. spring boot 跨域访问处理

    问题场景:由于项目中使用到跨域访问,今天也得到高人指点,所以写出来分享给大家.可能是考虑到前后端分离,前端后端服务器不在一台机器上,出现这种跨域访问的情况.正常情况下本地访问是没有问题,但是遇到这种非 ...

  4. spring boot跨域设置

    定义 跨域是指从一个域名的网页去请求另一个域名的资源 跨域背景 限制原因 如果一个网页可以随意地访问另外一个网站的资源,那么就有可能在客户完全不知情的情况下出现安全问题 为什么要跨域 公司内部有多个不 ...

  5. SPRING BOOT跨域访问处理

    尊重原创:http://blog.csdn.net/ruiguang21/article/details/77878933 问题场景:由于项目中使用到跨域访问,今天也得到高人指点,所以写出来分享给大家 ...

  6. spring boot跨域问题

    跨域是指不同域名之间相互访问.跨域,指的是浏览器不能执行其他网站的脚本.它是浏览器的同源策略造成的,是浏览器对JavaScript施加的安全限制.也就是如果在A网站中,我们希望使用Ajax来获得B网站 ...

  7. spring boot 跨域请求

    场景 网站localhost:56338要访问网站localhost:3001的服务 在网站localhost:3001中增加CORS相关Java Config @Configuration @Ord ...

  8. 关于Spring MVC跨域

    1.Sping MVC 3.X跨域 关于跨域问题,主要用的比较多的是cros跨域. 详细介绍请看https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Ac ...

  9. spring mvc 跨域问题。。。解决

    官方推荐方式: http://spring.io/blog/2015/06/08/cors-support-in-spring-framework 方式1: $.ajax({ //前台:常规写法.注意 ...

随机推荐

  1. ecshop 邮件功能

    1.邮件服务器设置(配置好了,在本地和虚拟主机都可以使用) a.163邮箱配置 b.QQ邮箱配置 2.关注管理(客户关注了某以商品,就可以给客户发送邮件) 3.邮件订阅管理,数据表:ecs_email ...

  2. aufomaper Queryable Extensions ProjectTo

    When using an ORM such as NHibernate or Entity Framework with AutoMapper's standard Mapper.Map funct ...

  3. Apache日志配置详解(rotatelogs LogFormat)

    logs/error_logCustomLog logs/access_log common--默认为以上部分 修改为如下: ErrorLog "|/usr/sbin/rotatelogs ...

  4. Python开发【第二篇】:初识Python

    Python开发[第二篇]:初识Python   Python简介 Python前世今生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏 ...

  5. [Exchange]使用EWS托管API2.0同步邮箱

    你可以通过Exchange Web Serivice(EWS)托管API去检索从一个给定的时间点,文件夹中有变化的列表中的项. 客户端可以使用SyncFoldersItems方法,同步服务端的项目,你 ...

  6. 【转】linux ar 命令的使用说明那个和例子

    from: http://blog.csdn.net/xljiulong/article/details/7082960 linux ar 命令的使用说明那个和例子 标签: linuxmakefile ...

  7. 【9-2】mysql数据库学习01

    mysql安装 下载社区版本MySQL软件包(地址),或者windows installer 接压缩安装包到目标路径 在系统变量Path中加入目标路径 在mysql安装路径下,修改配置文件mysql- ...

  8. php操作mysql数据库

    <span style="font-family:Arial,Helvetica,sans-serif">在php操作数据库过,会频繁对数据库进行各种操作,所以,php ...

  9. javascript 数据类型转换

    javascrīpt 类型转换函数 在Javascrīpt中,Double类型和Int类型都是看作为Number对象. 1.Number转成String number.toString() Strin ...

  10. 希望各位博友能对我的自我介绍提出意见(要面试IBM的应用开发工程师,本科应届生一枚)

    面试官你好,首先我非常高兴能参加今天的面试. 我叫XXX(我名字里面有光宗耀祖),也许父母希望我光宗耀祖吧,所以给我起这样的名字.我的家乡山西太原,本科就读于XX大学,专业是信息与计算科学. 我今天要 ...