登录:
1.早期
以往单个服务器去部署整个项目的话,使用的是单一服务器模式,这种模式是将登录的信息存储在session中,下次登录的时候在session中找有没有这个信息,若有则登录。方法时session.set("user",user),session.get("user")
2.现在使用SSO模式去实现登录,(single sign on)单点登录
现在基本每个项目都不止一个服务器,基本都是使用微服务分布式架构,项目中的每个功能都独立成一个模块,每个模块独立运行互不影响,并且每个模块至少使用一个服务器,而此时如果使用早期的单一服务器模式的话在登录方面就会变得效率低下,用户体验不足,当你要访问项目的模块时,总不能访问一个模块然后登录一次,所以出现了SSO模式,也就是单点登录模式。
单点登录的三种常见方式:
第一种:session广播机制实现,使用session复制的方式使得每个模块的session中都有登录的信息。适合于少数的几个模块,若是多个模块资源消耗过大,且大量复制也会造成大量重复数据。
第二种:使用cookie+redis实现,cookie是客户端机制,他是存在浏览器中的,发送请求都会携带着cookie,而redis的一大特点就是读写速度快且基于key-value
实现存储。两步实现该操作:
第一步:在项目中的任何一个模块进行登录,登录之后,会把数据放到两个地方
(1)redis:在key中生成一个随机值(ip+UUID等),在value中存放用户信息。
(2)cookie:把redis中的key值放在cookie中。
第二步:访问项目中的其他模块,此时就会发送请求,而每次请求中都会携带着cookie,此时就会去cookie中取值,再获取到值后到redis中进行查询,如果有数据则可以登录。
第三种:使用token实现,token就是根据规则生成的一组字符串,该字符串中包含着用户信息。两步实现该操作:
第一步:在项目的某个模块进行登录,登录之后,按照规则生成字符串,把登陆之后用户的信息包含到字符串中,把字符串返回,有两种返回模式,一种是把字符串通过cookie返回,一种是把字符串通过地址栏返回。
第二步:再去访问其他模块时,每次访问在地址栏中都要带着生成的字符串,在访问模块的地址中获取到字符串,根据字符串获取到用户信息,如果可以获取到那么就可以登录。