SSO(转)

时间:2024-04-09 00:08:20

一、介绍

      主站下有多个子系统,每次登录主系统,跳转到子系统时,又需要重新登录;

子系统与主系统都有各自的用户信息表;各个系统的用户角色、权限也各不相同;

二、目的

      每次登录主系统,跳转到子系统后,不用再重新输入用户名、密码,进行登录;也就是“单点登录”;

三、主要思路

      (1)跨子域共享cookie(主站:www.A.com   子站:test.A.com    →设置cookie的Domain=“.A.com” 就可以实现cookie共享)

(2)分布式session(暂未涉及,下班研究下~~)

四、具体实现

      思路一(跨子域共享cookie):在任意一个系统登录成功后,将用户名保存到cookie中;当用户进入其他系统时,首先判断cookie中的用户名是否为空;如果为空,则跳转到当前系统的登录页面;不为空则根据用户名,查询出当前系统的用户信息,实现自动登录;

思路二(分布式session):创建单独的用户信息数据库,统一的登录入口;在任意一个系统登录成功后,将用户的详细信息存储到session中;当用户进去其他系统时,首先判断session中的用户信息是否为空;如果为空,则跳转到登录页面,登录成功后再返回当前页面;如果不为空则显示当前页面内容;

----用户信息数据库表结构:系统分类表、用户基本信息表、角色类型表、权限表、用户角色表

->系统分类表:系统编号、系统名称

      ->用户基本信息表:用户的基本字段~~

      ->角色类型表:角色编号、角色名称、所属系统编号

      ->权限表:用户编号、系统编号、权限值

      ->用户角色表:用户编号、所属角色编号

当用户再任一系统登录时,可以根据用户名、密码、系统编号得到当前用户的基本信息以及当前系统的角色、权限信息等

用分布式session服务器,所有主系统 子系统都去特定的session服务查找判断

我用的也是第二种方案,更灵活一点。
SSO只做密码验证,其它权限还是由子系统分别设置。