1.使用session实现登录的问题
每个服务器中都有一份属于自己的session,这会导致多台服务器情况下的数据不统一。
使用session拷贝会出现两大问题:
1、每台服务器中都有完整的一份session数据,服务器压力过大。
2、session拷贝数据时,可能会出现延迟
2.redis代替session
原理:
redis数据本身便是共享可以解决掉session共享问题,且可以利用threadLocal的特性,将用户重要数据以token为key存入redis中,自定义拦截器将请求拦截校验redis中是否有用户数据,如果有,将用户数据存入当前线程中。
代码片段如下:
1.获取验证码
2.登录验证
3.定义拦截器
第一层拦截器:拦截所有请求,用于判断且存入用户信息。
第二层拦截器:用于拦截需要具有用户信息的请求.
拦截器注册
3.总结:
1.用户登录时,通过生成的token为key存入redis中,并将token返回给前端。
2.第一层拦截器:验证前端的请求头是否有token,如果有,通过token拿到redis中的用户信息,并存入ThreadLocal中。
3.第二层拦截器:验证ThreadLocal中是否具有用户信息,来验证是否用户登录。