单点登录
项目组成
基于spring-boot-2.1.8.RELEASE,使用redis完成完成 session记录。
- sso-base
- sso-server
- sso-client1
- sso-client2
sso-base
- TokenFilter: 拦截获取是否登录,并获取登录用户设置到线程变量中
- TokenUtil:从redis获取指定key判断是否登录,以及登录用户;写入sessionId和sessionIdKey
- ClientTokenProperties: client需要的配置项
- serverLoginUrl, server登录url
- login请求的username 和 password,用于向server端登录
- redisAddr, 读取sessionId和sessionIdKey,userPOValue
- ServerTokenProperties:server需要的配置项
- redisAddr, 写入sessionId和sessionIdKey,userPOValue
- expiredSeconds, 过期时间
- SSOConfig,加入需要的bean
- RedisProperties,使用自定义的redis配置项,完成 RedisProperties配置
- RedisTemplate,提供模板方法
sso-client1
- ClientFilterConfig, 配置FilterRegistrationBean,使用TokenFilter拦截所有请求
- ClientController, web接口
配置项:
server.port=1001 cn.cxd.sso.client.redisAddr=localhost:6379 cn.cxd.sso.client.serverLoginUrl=http://localhost:1000/server/login cn.cxd.sso.client.login.username=root cn.cxd.sso.client.login.password=rootsso-client2
同 sso-client1
server.port=1002 cn.cxd.sso.client.redisAddr=localhost:6379 cn.cxd.sso.client.serverLoginUrl=http://localhost:1000/server/login cn.cxd.sso.client.login.username=root cn.cxd.sso.client.login.password=rootsso-server
- LoginController, 登录接口,生成sessonId,使用TokenUtil,写入sessionId和sessionIdKey
cn.cxd.sso.server.expiredSeconds=1000 cn.cxd.sso.server.redisAddr=localhost:6379 server.port=1000整体效果
- server登录后,client1,client2 都能在正确访问各自的web接口
- client1/client2登录后,两个client都能正确访问各自的web接口
- client1/client2登录后,server再登录,client1/client2 都可以正确访问各自的web接口
api
server
- http://localhost:1000/server/login
- POST
- { "userName" : "root11", "password" : "root11" }
client1
- http://localhost:1001/client1/mydata
- GET
client2
- http://localhost:1002/client2/mydata
- GET
访问时序图


架构图

5722

被折叠的 条评论
为什么被折叠?



