1.背景条件
- 两个系统A和B
- A为主,B为次
- 登录入口是A
2.共享登录逻辑流程(不使用session)
- A登录时,生成一个随机码token,例如UUID
- 将token做为key,userId做为value,存入redis,设置过期时间
- 将token存入cookie,设置过期时间,设置domain
- A,B系统通过cookie获取token,然后从redis获取userId
- 注销时,删除redis中的token,删除cookie
3.session共享逻辑流程(使用session)
- A登录时,将信息存入session,然后生成一个随机码token,例如UUID
- 将token做为key,session做为value,存入redis,设置过期时间
- 将token存入cookie,设置过期时间,设置domain
- A,B系统通过cookie获取token,然后从redis获取session
- 判断从redis获取的session和原来的session是否一致,若不一致,则需要覆盖原来的session(主要为了防止重复覆盖和session不一致)
- 注销时,删除redis中的token,删除cookie
代码举例(第二种)
- A系统 login:
// 系统session
session.set("userId","firetw");
...
// session信息存入map
Map<String,String> sessionMap = new HashMap<String, String>();
sessionMap.put("userId","firetw");
...
HttpServletResponse response = ServletActionContext.getResponse();
// 随机token
String token=UUID.randomUUID().toString().toLowerCase().replace("-", "");
// userId存入redis
RedisUtil.setString("token_"+token, bean.getUserId(), pcExpire);
// sessionMap存入redis
RedisUtil.setMap("session_&