单点登录(SSO)是大型网站必要的实现,例如电商网站,一个系统后面往往有N多个子系统,当用户操作时,验证一个系统后如果还需要去验证其他字系统,那将会很麻烦,所以对此,就要使用到单点登录来产生和存储一个信任来使用户不需要频繁认证,还有一个问题就是其他子系统如何去验证信任。
这就是单点登录的目的,所以我们需要做的主要有两方面
~产生存储信任
~验证信任
主要有两种实现方式
一:Redis+Jackson+Cookie+Filter原生实现单点登录
在cookie中写入信息,写入信任。
https://blog.csdn.net/sinat_25295611/article/details/80406172
https://blog.csdn.net/qq_35704236/article/details/80427480
1:构建Redis连接池来提供Redis实例
2:封装Redis API以支持对Redis的操作
3:因为Redis中存储的是json字符串格式,所以需要编写一个json格式转换工具
4:Cookie读写的封装,登录成功时将token写入cookie和Redis,再次登录时检测Cookie中的token是否还存在。
5:退出时删除cookie。
6:配置session重新登录时的有效时间。
这种实现方式对代码的侵入性较高,在多处需要改动。
二:Spring Session+Redis实现SSO
https://blog.csdn.net/sinat_25295611/article/details/80446506
它的原理和原生代码实现类似,通过对HttpServletRequest和HttpServletResponse的包装来实现cookie的读写,序列化采用JDK原生的方式。
1:在用户登录登出等controller方法里面使用原生的session进行存储或者删除用户的登录信息。
2:在web.xml中配置filter,此处使用官方的org.springframework.web.filter.DelegatingFilterProx这个filter来重置session的有效时间。
3:配置springsession.xml,以xml方式配置RedisheCookie。