单点登录
- 单点登录可以解决不同的子系统在跨域时登录的问题
- 登录系统是利用SSO技术实现的,SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统:不需要重复、多次、多个系统的登录。它包括可以将这次主要的登录映射到其他应用中用于登录同一个用户的登录的机制。我使用SSO技术的接口文档,即校验接口、注册、登录接口、根据token查询用户接口、安全退出。
- 这个调用服务是利用了json形式访问的服务接口,实现跨域访问。
具体的实现流程 :
- 当用户点击注册时,跳转到注册页面,即用户信息的保存功能。
- 检验用户名是否存在、密码是否为空、 手机号和邮箱是否有效,校验完成后把密码加密,以保证用户密码的私密性,完成用户信息的保存功能。
- 当用户登录时,用户输入用户名和密码,校验用户名是否在数据库已经存在,然后把用户输入的密码进行加密与数据库中的密码进行比对校验,这里的加密使用了spring的MD5加密技术。
- 当校验全部完成后,服务器给用户颁发一个token令牌(利用UUID实现),然后将token存入redis中(token的value是UUID生成的号,key是用户名),然后设置用户的过期时间,这相当于用户的session.然后将token写入cookie中,前台页面利用json调用,当跨域时,页面根据cookie去找token(根据SSO的由token查询用户的服务),查看用户是否有效,如没有用户则重新登录,若有用户,redis过期,重新登录,没有过期的经过token的唯一身份标识去redis中去查询,进而实现单点登录。
- 这里的cookie是设置了共享域,即全部子系统可以访问到cookie。当用户登录其他子系统时,先从cookie中获取token信息,根据token获取用户信息,判断用户信息是否有效,如果有效则放行;如果无效,则利用拦截器拦截跳转到登录页面。用户再次登录时刷新redis的时间,重新设置有效期。