项目单点登录

单点登录就是一个子系统登录之后,其他系统就不用在登录了(一个域名下进行登录,其他的域名就都有了登录状态),就类似于京东那样,你无论在哪个页面点击登录,他都会跳到一个登录子系统下(域名不同passport.jd.com)去进行一个登录,当这个系统进行登录之后,其他的子系统就不用再登录了。

就比如我们在首页登录,点击登录,跳转到登录系统,完成登录后跳回首页页面,同时响应一个cookie去首页,这个cookie存储一个就是能认证用户是否登录的一个数据,这条cookie是能被其他页面互相访问的。cookie要是能被其他子系统带到服务器,cookie的域要是所有子系统都相同的域,所以登录过后,向子系统写入cookie的时候,domain中是应该包含着他们的主域名,因为主域名都是相同的,就比如,京东的主域名就是jd.com。

其他的子系统拿到了登录域的cookie后,但是他们的服务器后台是不承认的,所以需要统一先去访问登录系统的后台,登录系统的后台提供了一个判定的方法,登录系统的后台放行的话,就可以去访问自己的后台服务器。其他子系统再去请求服务器的时候就会把刚才响应的cookie带着,这个cookie中保存用于认证用户是否登录的信息(token),还有自己的域名,然后服务器就能拿到这个cookie去判断他们是否登录了。

cookie:基于浏览器存储,默认不同域名是不共享的,也可以设置共享所有的域名,但是很危险。

单点登录实现:--qq和微信也是实现的单点登录

第一步:登录之后,允许cookie进行对需要的域名共享(不同子域名下:domain("相同的主域名"),本机不同的服务器端口:$.cookie("key","value","/")),js和后端都可以实现

第二步:不同域名拿到登录域的cookie之后,他们本身的服务器是不承认这个cookie的,需要统一去访问登录域的服务器后台,提供一个判定的方法,登录系统的后台方形之后,其他子系统就可以去访问自己的服务器了

具体实现的话,假设先从首页跳转到的登录页面,把首页地址存储到一个session会话里面,然后跳转到登录页面,这个session是用来登录成功后进行一个页面的返回跳转

用户登录成功匹配上账号密码的话,会UUID.randomUUID().toString() random随机生成一个变量a,把变量a存入到cookie中,

cookie再设置一下setDomain,去设置成主域名,实现了一个cookie共享的这么一个功能,

然后设置cookie的路径和过期时间,cookie过期时间设置为七天,当退出登录的时候,改变cookie的过期时间为0。

然后response.addCookie(cookie);把cookie返回给response

然后再声明一个Map,是把变量a当做key值,用户信息当做value值存入到一个Map中,这样的话能根据key值变量a,取到用户的信息。

账号密码成功的话就重定向到刚才跳转到登录页面的页面

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值