官网地址:https://www.xuxueli.com/xxl-sso/
下载好源码导入idea
配置环境变量
127.0.0.1 xxlssoserver.com 127.0.0.1 xxlssoclient1.com 127.0.0.1 xxlssoclient2.com
修改xxlsso-server配置文件application.properties的redis信息
启动xxlsso-server服务
访问:http://xxlssoserver.com:8080/xxl-sso-server/
账号密码:user/123456
基于Cookie方式
client1访问:http://xxlssoclient1.com:8081/xxl-sso-web-sample-springboot/
client1进入拦截器XxlSsoWebFilter
client1从Cookie中根据xxl_sso_sessionid获取cookieSessionId,获取不到
client1根据sessionid获取用户信息 client1从请求参数中获取xxl_sso_sessionid,获取不到
client1重定向到sso-server认证中心的login方法,并在url后面带上redirect_url
进入到sso-server的controller
sso-server获取cookie中xxl_sso_sessionid的sessionid,获取不到
sso-server返回到login页面
sso-server登陆页面
sso-server端登陆方法
sso-server生成sessionId:com.xxl.sso.core.store.SsoSessionIdHelper.makeSessionId(userId_version)
sso-server存入redis(key:xxl_sso_sessionid#userId,value:xxlUser),存入cookie(name:xxl_sso_sessionid,value:sessionId)
sso-server重定向回到client1页面,redirect_url后面带上了xxl_sso_sessionid
进入到client1拦截器
client1从cookie中根据xxl_session_id获取sessionid,获取不到,再从请求参数中根据xxl_sso_sessionid获取sessionid,获取到了,根据sessionid从redis中获取到用户信息,放入到cookie中
client1页面获取用户信息
client1登陆成功
client2登陆,访问:http://xxlssoclient2.com:8081/xxl-sso-web-sample-springboot/
进入到拦截器
client2的cookie中拿不到xxl_sso_sessionid
client2的请求参数中拿不到xxl_sso_sessionid
重定向到sso-server认证中心
sso-server的login方法
sso-server从cookie中拿到xxl_sso_sessionid
sso-server根据xxl_sso_sessionid获取用户信息
sso-server重定向到client2 ,带上xxl_sso_sessionid
client2进入到拦截器,从cookie中获取不到xxl_sso_sessionid,从请求参数中获取到了xxl_sso_sessionid,从redis中获取到用户信息
拦截器放行
页面获取用户信息
client2登陆成功
退出登陆
进入拦截器XxlSsoWebFilter,client2移除cookie的xxl_sso_sessionid,重定向到sso-server的logout方法
sso-server的logout方法
sso-server从cookie中根据xxl_sso_sessionid获取sessionid,移除redis和cookie的登陆数据,之后重定向到login方法
sso-server的login方法,从cookie和redis中获取不到登陆信息,返回到login页面
sso-server登陆页面
基于Token方式
用postman访问sso-server的登录接口
sso-server的login方法
sso-server生成sessionId:com.xxl.sso.core.store.SsoSessionIdHelper.makeSessionId(userId_version)
sso-server存入redis(key:xxl_sso_sessionid#userid,value:xxlUser) sso-server返回sessionid
client1访问接口,请求头不传xxl_sso_sessionid
client1请求头传xxl_sso_sessionid
进入client1拦截器
client1从请求头根据xxl_sso_sessionid获取sessionid,根据sessionid从redis中获取用户信息
client1进入到controller
client1获取到用户信息
客户端2登陆 ,已登陆状态
client1登出
client1移除redis登陆信息
client2访问服务,显示未登录