SSO单点登录(三)基于session的服务端

目录

SSO单点登录(一)理论知识总结
SSO单点登录(二)基于redis的服务端
SSO单点登录(三)基于session的服务端
SSO单点登录(四)客户端的设计与实现
SSO单点登录(五)服务端集成dubbo版本
持续更新中…


其他的内容不过多废话,服务端的详细内容可以见SSO单点登录(二)基于redis的服务端

本来,主要是针对核心逻辑,由redis改为session的处理方式,如果非要问一个优缺点,那就简单说明几点

  • redis可以拓展很多,比如分布式系统等,但是登录数据不会销毁,安全性存在一定问题,就会出现一人登录,多人共享的效果
  • session的话,目前只能管理本地会话,浏览器关闭session会销毁,安全性更好一点

ok,直接来看一下代码的改造逻辑吧,部分对象这里就不列举了,见前一篇

1. 登录核心逻辑
//1.校验用户(获取用户逻辑省略)
UserInfo userInfo = ...;
if(userInfo == null){
    return "用户不存在"
}

//2.生成token(生成唯一标识即可,可按自己的要求定义)
String token = UUID.randomUUID().toString();
userInfo.setToken(token);

//3.用户登录信息写入session
HttpSession session = httpServletRequest.getSession(true);
session.setAttribute("loginUser", userInfo);

return "登录成功";

2. 认证鉴权核心逻辑
/**
* SSO登录地址
*/
private static final String SSO_LOGIN_URL = "...";

/**
* @param token 登录唯一标识
* @param indexUrl 目标子系统首页
*/
public AuthResult applyAuth(String token, String indexUrl) {
    //要拼接的跳转地址(sso登录后,可根据redirectUrl参数决定跳转到主页还是目标系统页面)
    String redirectUrl = StringUtils.isEmpty(indexUrl) ? "" : "?redirectUrl=" + indexUrl;

    AuthResult authResult = new AuthResult();

	HttpSession session = httpServletRequest.getSession(true);
	UserInfo userInfo = (UserInfo)session.getAttribute("loginUser");
    if(userInfo == null){
        //校验失败 - 跳转到登录页
        authResult.setAuth(false);
        authResult.setRedirectUrl(SSO_LOGIN_URL + redirectUrl);
    }else{
        //校验成功 - 返回用户信息
        authResult.setAuth(true);
        authResult.setUserInfo(userInfo);
    }

    return authResult;
}

其他逻辑基本没变,就是存储用户的时候,由redis变为session了,优缺点上面也说了,针对项目及背景的不同,技术方案的选择也会不同,选择适合的才是最好的。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
SSO (Single Sign-On) 登录是指在访问多个系统或应用程序时,用户只需登录一次就可以访问所有的系统,而无需再次输入用户名和密码。基于cookie二级域名下跨域共享是指在跨域访问的情况下,通过设置cookie的域名和路径,使得不同域名下的系统能够共享登录状态。 具体来说,当用户成功登录一个系统后,该系统会生成一个包含用户登录状态的cookie,并设置该cookie的域名为当前系统的二级域名。然后,该cookie会被发送给浏览器保存,在用户访问其他系统时,浏览器会自动通过cookie将用户的登录状态传递给其他系统。 为了实现跨域共享,所有需要实现SSO的系统的二级域名需要设置为相同的根域名。例如,系统A的域名为a.example.com,系统B的域名为b.example.com,则它们的根域名为example.com。为了在这两个系统之间实现跨域共享,可以将cookie的域名设置为.example.com,这样两个系统就可以共享同一个cookie。 当用户访问系统A时,系统A会检查是否存在含有登录状态的cookie,如果存在则表示用户已经登录,可以直接访问系统A的资源。如果用户访问系统B,系统B也会检查是否存在含有登录状态的cookie,如果存在则表示用户已经登录,可以直接访问系统B的资源。 通过基于cookie二级域名下跨域共享的方式,SSO登录实现了用户在不同系统间的无缝登录体验,提高了用户的使用便捷性和系统的安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值