单点登录一

单点登录是什么
 单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统,即用户只需要记住一组用户名和密码就可以登录所有有权限的系统。
如下为一个单点登录的简易图解: 当用户第一次访问应用系统1时,需要进行用户登录,认证中心通过了用户的登录信息后会返回用户凭证ticket与用户信息,当用户访问应用系统2或者应用系统3的时候会携带用户凭证ticket,认证中心会验证ticket的有效性,如果验证通过则返回当前登录的用户信息。

在这里插入图片描述

单点登录流转图
存在两个系统OA与PRO系统,浏览器第一次访问OA系统的时候需要进行用户登录,OA系统登录成功后,浏览器可以不用登录直接访问PRO系统。
在这里插入图片描述

单点登录会话如何统一管理?
单点登录会话通过cookie的方式统一管理,因为cookie是客户端技术,不同系统之间在同一个浏览器下面可以共享cookie,在cookie中存放用户登录凭证,服务端获取cookie中用户登录凭证后,从而在缓存中查找登录用户信息。

为什么不直接在cookie中存放登录用户信息,从而减少在服务端使用缓存服务器来存放登录用户信息?
1:cookie的数据存放在客户的浏览器上,可以分析存放本地的cookie从而获取用户登录信息,所以cookie不是很安全。
2:cookie保存的数据不能超过4k。

用户未登录的情况如何跳转到认证中心进行用户登录?
在拦截器中会判断cookie中是否存放用户凭证,用户未登录则cookie中用户登录凭证为空,所以可以通过重定向的方式跳转到认证中心的登录首页。

@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		// TODO Auto-generated method stub
		//cookie中查找用户凭证token
		String token = CookieUtils.getCookieValue(request, "TOKEN");
		if(StringUtils.isNotEmpty(token)){
			String resultJson=HttpClientUtil.doGet("Http://"+ssoAddress+":"+ssoPort+"/token/"+token);
			//把json对象转为java对象
			CommonResult commonResult=JSON.parseObject(resultJson, CommonResult.class); 
			if(commonResult!=null && commonResult.getCode()==2000){
				JSONObject jo=(JSONObject) commonResult.getData();
				SSOUserVo uservo = jo.toJavaObject(SSOUserVo.class);
				if(uservo!=null){
					return true;
				}
			}
		}
		//重定向到认证中心的登录首页
		response.sendRedirect("Http://"+ssoAddress+":"+ssoPort+"/page/login?redirectUrl="+request.getRequestURL().toString());
		return false;
	}

Springboot+redis单点登录代码实现
https://github.com/lx-sunday/sso.git
sso-server为认证中心
sso-oa为oa系统
sso-pro为pro系统
项目在启动之前需要安装并启动redis

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值