• 单点登录系统SSO实现


    前些天被问到单点登录了,而据我当时做的这个模块两年了,现在重新温习并记录下,方便以后快速回忆起来

    一、什么是单点登录系统

    SSO全称Single Sign On。SSO是用户只需要登录一次就可以访问所有相互信任的应用系统

    二、为什么需要单点登录系统

    分布式集群的项目因为每个模块都部署在不同的机器。如果第一次在A系统登录,第二次访问B系统,这个时候B系统并没有保存用户状态,或者第一次nginx转发到A系统的机器1,在机器1登录,第二次访问A系统,nginx转发到了机器2,这些情况下都是需要重新登录。

    为了解决这种情况,可以有两种机制:单点登录、tomcat配置session复制

    session复制在集群下,代价过高,可能导致系统资源消耗过多。

    所以构建一个单点登录系统,提供一个接口,供其他模块调用,来检测用户登录状态。实现就是使用redsi来模拟session,对session统一管理

    三、怎么实现

    1、首先sso系统提供登录,校验用户,登出等基本用户操作

    2、登录的时候将用户信息保存到redis中,并设置过期时间,(key可以含有token,value为用户信息),请将用户的token响应给浏览器cookie,并设置cookie的domain(domain用来设置域,方便子域名系统能把cookie携带过来)

    3、登录校验:最好写成一个过滤器,用户每次请求当前domain设置的域名及其子域名的时候,会携带用户cookie,过滤器从cookie里取token,去redis里查询用户信息,查到就放行,未查到就跳转到登录页面

    4、登出:用户发起登出请求,登出接口获取到cookie中的用户的token,然后进行缓存请求,并清空cookie

    参考链接:https://www.jianshu.com/p/cf41a10da952

  • 相关阅读:
    打包的@font-face包
    带你零基础入门redis【二】
    带你零基础入门redis【一】
    CentOS查找文件命令
    输入密码时提示大写锁定已打开
    JSP界面设置提示浮动框
    极光推送
    MySQL获取汉字的首字母
    mySQL函数根据经纬度计算两点距离
    js判断输入时间是否大于系统时间
  • 原文地址:https://www.cnblogs.com/xhy-shine/p/11382818.html
Copyright © 2020-2023  润新知