NutzCN Logo
问答 跨域请求单点登录,登录成功,但是在controller中获取的cookie与浏览器中不一致,请大神指点一二。^_^
发布于 2608天前 作者 gaohuijue 2962 次浏览 复制 上一个帖子 下一个帖子
标签: nutzwk

跨域请求js代码:

$.ajax({
			type:"post",
			async:false,
			contentType : "application/x-www-form-urlencoded;charset=UTF-8",
			//data:"username=superadmin&password=1&captcha=",
			data:{
				username:"superadmin",
				password:"1",
				captcha:""
			},
			xhrFields: {
				withCredentials: true
			},
			crossDomain:true,
			url : "http://127.0.0.1:8090/platform/login/doLogin",
			complete : function(xhr) {
					if (xhr.readyState == 4 && xhr.status == 200) {
						var ret = xhr.responseJSON;
						debugger;//这里能收到登录成功的信息
                                                ... ...
					} else {
						... ...
					}
				}
		});

controller中增加了

res.setHeader("Access-Control-Allow-Origin","http://127.0.0.1:8080");
res.setHeader("Access-Control-Allow-Headers","Origin, X-Requested-With, Content-Type, Accept, Key");
res.setHeader("Access-Control-Allow-Credentials","true");

场景描述:
我的login页面是在tomcat的8080端口的一个服务,nutzwk起在了另一个Tomcat的8090端口。
比如当前浏览器打开login页面,然后再谷歌开发者工具中查看cookie,内容如下
name value domain path
sid a948518-3d0c-4b39-8898-616b7850b609 127.0.0.1 / ..........
然后发送登录请求,返回信息是登录成功。开发者工具中查看doLogin的请求
request cookies 中sid=f2cae97c-f38f-4a79-b150-127810117f3a

浏览器的cookie的sid值 和 login请求的request的sid 不一样,其中f2cae97c-f38f-4a79-b150-127810117f3a这个在redis中是登录状态。请问这是为什么?

11 回复

a948518-3d0c-4b39-8898-616b7850b609是login页面所在tomcat 8080的cookie

f2cae97c-f38f-4a79-b150-127810117f3a是nutzwk所在tomcat 9080的cookie

要取也是xhr响应中的cookie,而不是login页面的cookie

就是说xhr请求并没有携带cookie,因为他只能携带nutzwk下发的cookie,然后请求到后台,分配sessionid是f2cae97c-f38f-4a79-b150-127810117f3a,然后响应中的cookie的sid就是f2cae97c-f38f-4a79-b150-127810117f3a.请问是否是这样。
还有就是我的两个web服务是用的同一个redis,nutzwk能否把浏览器当前cookie的sid=a948518-3d0c-4b39-8898-616b7850b609改成f2cae97c-f38f-4a79-b150-127810117f3a,那么就相当于登录成功了,或者nutzwk直接能获取sid=a948518-3d0c-4b39-8898-616b7850b609,然后登录,那么也登录成功了,请问能否实现?

@gaohuijue 我觉得可以传cookie过去试试,反正cookie也只是header的一种

@wendal httpOnly的cookie获取不到啊

@gaohuijue 那就改成不是httpOnly嘛。。。

@wendal 是不是不安全啊◔ ‸◔?

要安全的话,你得换个思路实现

@wendal 比如oauth2?还有其他的方案吗?

恩,要安全就没法简单实现了

@wendal 行,我再研究研究,谢谢兽总

有个简单的思路

nutzwk登录成功后返回一个token,这个token存在数据库/redis里面,关联用户id

然后呢,login页面拿这token,访问808上的一个入口方法

该入口方法去数据库/redis查这个token对应的用户id

最后,调用shiro的login完成登录

token得设有效期,且验证完就删

添加回复
请先登陆
回到顶部