案例:系统A跨域访问系统B(系统A、B分别部署在同一台服务器的2个tomcat上)
1.在A系统超链接一个地址访问B系统
<li style="color: #000000;"><a href="http://localhost:8090" onclick="getLogin();" target="_blank">访问论坛</a></li>
2.在A系统使用jsonp跨域
function getLogin(){
$.ajax("http://localhost:8090/login/doLoginnext?returnUrl=/&userName=${user.login_id}", {
timeout:2000,
async:false,
dataType: 'jsonp',//返回的数据类型,设置为JSONP方式
jsonp:'callback',//指定一个查询参数名称来覆盖默认的 jsonp 回调参数名 callback
jsonpCallback:"successCallback",//设置回调函数名
crossDomain: true,//是否允许跨域
success: function (data) {
console.log("success")
},
error: function (XMLHttpReuqest, textStautus, errothrown) {
console.log(errothrown);
}
});
//window.open("http://localhost:8090", "_blank");
}
注意:
(1)A系统跨域访问B系统的http://localhost:8090,首先需要从A系统登陆B系统,然后才能访问(doLoginnext即为重写的B系统的登陆方法)
(2)重写的B系统的登陆方法只针对从A系统访问B系统跨域时使用,不影响用户在B系统直接登陆的方法
(3)A、B系统应该具有相同的用户名、密码等相关信息
(4)正常跨域登陆应该把A系统的账号、密码等信息跨域时传给B系统用户登陆时账号、密码验证;此演示案例A系统的session保存有用户名等其他信息,没有密码信息;因此跨域时在B系统后台只验证账号,不再验证密码。