原文档如下:
正常情况下,登录流程如下:
1、访问 "Client01应用地址" ,将会自动 redirect 到 "SSO认证中心地址" 登录界面
2、成功登录后,将会自动 redirect 返回到 "Client01应用地址",并切换为已登录状态
3、此时,访问 "Client02应用地址",不需登陆将会自动切换为已登录状态
对第三点始终没理解,用户在访问client02时,因为跨域的原因,又不能携带cookie中的sessionId,这个时候,认证服务端怎么知道是同一个用户已经通过访问client01登陆了呢。
第三点 我看他在代码里是通过header里获取若是没有header我在这个方法里做了一个这样的处理。这里有个问题就是client01 和clien02只能在同一个浏览器里。
public static XxlSsoUser loginCheck(HttpServletRequest request){
String headerSessionId = request.getHeader(Conf.SSO_SESSIONID);
if (headerSessionId == null ) {
Cookie[] cookies = request.getCookies();
for (Cookie cookie : cookies) {
if (cookie.getName().equals(Conf.SSO_SESSIONID)) {
headerSessionId = cookie.getValue();
}
}
}
return loginCheck(headerSessionId);
}
这个应该是 A-client B-client C-认证服务器
登录A后,C将cookie留在C域名下;登录B时,重定向到C域名进行登录时,会自动携带当前域名下所有cookie,C向B返回session用户信息
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
访问client2时会重定向到认证中心,浏览器就带上认证中心域的cookie,认证中心所以就知道是登录过的,然后再重定向到刚刚请求client2应用的资源同时附上一个xxl_sessionid,这个就是全局session,client2应用拿到这个全局session就去redis上验证,验证通过就认为是已经登录过的,就直接放行,不需要再到登录页输入账户和密码。
登录 后才可以发表评论