单点登录系统知识点总结

单点登录系统统一认证工程的设计(auth) 3.代码实现 3.代码实现4.认证授权配置代码实现 5.生成token令牌的组成 资源服务工程设计 单点登录中常用的依赖IDEA知识小点总结
单点登录两种解决方案
解决方案一:
客户端发送请求到网关进行验证,网关会转到auth认证授权中心,认证中心会完成用户信息的认证,完成认证会会基于UUID生成一个token,然后与用户信息绑定在一起存储到数据库.后续用户在访问资源时,基于token从数据库查询用户状态,这种方式因为要基于数据库存储和查询用户状态,所以性能表现一般.(一般可用于中小型企业,查询量较少的时候)
解决方案二:
用户登录成功后,会基于JWT技术生成一个token(这里的token中包含了原本存在数据库的用户信息),用户信息可以存储到这个token中.后续用户在访问资源时,对token内容解析,检查登录状态以及权限信息,无须再访问数据库.
jwt.io
工程结构设计:
因为单点登录属于多系统微服务架构,因此所有的服务开启前都需要打开nacos注册中心,将服务注册到注册中心上 。
系统基础服务工程设计() 1.服务设计结构
user包含的业务是(后续会在auth服务中进行远程调用):
1)基于用户名查询用户信息
2)基于用户id查询用户权限
Log包含的业务是:
2.系统服务之间表之间的关系 。(重点)
注意:表与表之间,多对多时,关系的维护方在中间关联表 。一对多时,关系的维护方在多的那一个表 。
通过用户ID查询用户对应的菜单权限,首先要找到用户对应的角色,通过角色ID再到菜单表中找到对应的菜单ID,再通过菜单ID找到对应的权限 。
解决方案:
#方案一:单表查询#基于用户id查询用户对用的角色id(查询处的角色id可能是多个)select role_id from tb_user_roles where user_id = 1;#基于角色id查询用户对应的菜单idselect menu_id from tb_role_menus where role_id in (1);#基于菜单id查询菜单权限标识select permission from tb_menus where id in (1,2,3);#方案二:嵌套查询select permission from tb_menus where id in (select menu_id from tb_role_menus where role_id in (select role_id from tb_user_roles where user_id = 1));#方案三:多表查询select m.permissionfromtb_role_menus rm join tb_user_roles ur on rm.role_id=ur.role_idjoin tb_menus m on rm.menu_id =m.idwhere ur.role_id=1;
统一认证工程的设计(auth)
用户登陆时调用此工程对用户身份进行统一身份认证和授权
1.auth服务设计架构
以目标为导向进行设计,写代码时要按照正常顺序进行书写 。
原来执行登录操作时的过程:–>(过滤器)–>–> –>
而.处理请求进行过滤时就会调用r——>在调用pl方法进行登录操作 。
也就是一般基于用户名和密码进行业务操作一般写在中(这是官方规定的接口),pl实现接口,重写接口的方法 。
如果单纯的是我们自己写的pl,是不会主动交给认证管理器,因此要实现接口,并实现其方法 。然后去完成密码的比对操作
1)先设计pl类,从sso-服务中获取用户信息,并对用户信息进行封装返回,交给认证管理器(r) 。
其中要使用到远程服务调用,因此需要创建进行远程调用的接口(该接口负责远程调用) 。
当远程调用时,根据业务需求要基于用户名查询用户信息,因此需要对user进行封装,需要创建pojo实体类对象User 。
2)当用户使用用户名和密码进行登录时,会将用户的密码与数据库中加密的密码进行比对,因此需要将用户传输的密码进行加密处理,需要添加配置类 。