当前位置:首页 > javascript > 正文内容

SSO单点登陆

tigon4年前 (2020-07-31)javascript2036

1、单点登录实现原理
1)登录

注意:
1)跳转SSO验证登录时,需要使用sendDirect重定向;
2)浏览器与SSO之间建立的会话成为全局会话。
扩展:
a.spring项目如何获取本机的IP地址?

获得仅为ip地址不带端口
b.spring项目如何获取项目端口?

2)注销

SSO认证中心有一个全局会话的监听器,一旦全局会话注销,将通知所有注册系统注销

扩展知识:
Shiro的退出操作为:

3)部署

2、 Shiro的多Rrealm配置
1)第一步:设置登录类型标识;
2)第二步:新建org.apache.shiro.authc.UsernamePasswordToken的子类;
3)第三步:新建org.apache.shiro.authc.pam.ModularRealmAuthenticator的子类(自定义认证器);
4)第四步:定义不同的realm;
5)第五步:进行shiro的相关配置,包括配置自定义认证器(认证策略)、配置多个reaml到securitymanager。
相关的配置:
XML配置:https://blog.csdn.net/xiangwanpeng/article/details/54802509
SpringBoot集成:https://blog.csdn.net/cckevincyh/article/details/79629022

3、Shiro内置过滤器

4、Shiro整合SSO单点登录系统
参考链接:https://blog.csdn.net/m0_37797991/article/details/78529096
主要逻辑:
1)各自项目通过shiro进行登录认证;
2)自定义Filter并配置到securityManager中,所有请求必须通过此Filter;
3)Filter主要逻辑:
a.获取参数中的Token值,若不存在查看Cookie中是否存在;
b.如果都不存在Token值,重定向SSO认证服务地址进行登录操作;
c.如果Token存在,检查是否为退出操作;
d.如果是退出操作,首先清除缓存中的登录信息以及用户的登录操作,然后向SSO认证中心进行退出操作,由SSO认证中心通知所有服务下线,之后跳转到SSO的登录页面;
e.如果不是退出操作,去SSO验证Token的有效性;
f.如果验证无效,重定向至SSO认证服务地址进行登录操作;
g.如果验证有效,则SSO返回登录用户的信息,服务端将其存储,并将Token设置到Cookie中。
h.shiro的reaml中,登录校验为形式,用户信息从刚才的缓存中取用,同时密码设置为常量。

补充:
1)请求中的Token值为SSO认证中心生成,生成方式可以使用JWT(JSON Web Token)工具,也可以使用UUID。
JWT方式:

UUID:

2)Spring获取Coolie工具类
参考链接:https://www.cnblogs.com/EasonJim/p/7721950.html

3)Shiro踢出已登录的用户

4)登录失败超过一定次数如何锁定帐号?(Shiro)
参考链接:https://mp.weixin.qq.com/s/CasK9RvR_MrWvLaVMoZbMw

5、Shiro会话管理相关
参考链接:https://blog.csdn.net/ljxbbss/article/details/77771001
相关的类,便于使用:
1)使用会话
从当前的Subject中获取会话。

2)会话管理器
SessionManager管理所有Subject的session包括创建、维护、删除、失效、验证等工作。SessionManager是顶层组件,由SecurityManager管理。
SecurityManager的实现类DefaultSecurityManager及DefaultWebSecurityManager继承了SessionsSecurityManager。
SessionsSecurityManager可以把相应的会话管理委托给SessionManager。
例如SessionsSecurityManager中的代码

3)会话监听
要写自己的监听器,需要实现 SessionListener 接口。

4)会话存储/持久化
Session可以存储在内存或者各种数据库中。SessionManager委托SeesionDao对session进行增删改查。可以为SessionManager配置SessionDao。
a.EHCache SessionDAO;
b.Session ID生成器
在每次创建session时,SessionDAO都会使用 SessionIdGenerator生成一个新的session ID, SessionIdGenerator默认实现是JavaUuidSessionIdGenerator,也就是生成UUID。可以自定义自己的SessionIdGenerator。
SessionDao接口定义了以下方法。

5)会话验证
默认的 SessionValidationScheduler调度器实现是 ExecutorServiceSessionValidationScheduler (基于JDKScheduledExecutorService实现的)。默认的调度周期是1小时,也就是没小时都会执行一次session验证,并清除过期或无效的session。

6、结合shiro-redis的jar实现redis的会话管理:
参考链接:https://blog.csdn.net/qq_34021712/article/details/80774649
Shiro用redis实现缓存需要重写cache、cacheManager、SessionDAO和初始化redis配置。

0

版权声明:本文由Web学习之路发布,如需转载请注明出处。

本文链接:https://webge.net/?id=89

“SSO单点登陆” 的相关文章

h5绘制图画

参考网站资料编写的绘图<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">  ...

this指向

p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; line-height: 19.0px; font: 13.0px 'Helvetica Neue'; color: #000000}es5 中 this指向该函数被调用的对象es6 中箭头函数的this指向是定义时的对象...

js类型转换

js类型转换

数据类型: 原始类型:        Boolean Null Undefined Number String Symbol     显示类型转换: ...

js原型链

js原型链

创建对象有几种方法:原型,构造函数,实例,原型链左边 实例对象  instanceof 构造函数  来判断是不是同一个引用原型用constructor 比instanceof来判断继承更严谨var o3=new M()o3 instanceof  M  &nb...

函数参数会生成新的作用域

函数参数会生成新的作用域

如果函数定义了参数就会自动生成新的作用域,这时候里面的变量值就会先从参数新的作用域找,如果没有就会再往上面找直到全局...

event-loop

event-loop

如果知道js运行机制,在工作中会帮助我们更好的理解和编写代码,也知道为什么js是单线程js为什么是单线程原因,就是为了避免DOM渲染的冲突异步是一种“无奈”的解决方案,虽然有很多问题,如下:1,没按照书写方式执行,可读性差2,callback中不容易模块化什么是event-loop1,同步代码,直接...