在登录案例中,为了防止用户重复登录,通常我们会将用户信息存在cookie或者session中,这种做法在服务器为一台时自然没问题,可如果服务器为多台时,如何使别的服务器知道用户是否登录呢?
这里就需要引入分布式session的概念:
首先将用户登录信息存入第三方存储(redis)中,然后将这个登录信息返回到浏览器,用户每次访问时,都会携带这个登录信息 token,这时服务器拿到请求后会从redis中获取该用户的登录信息 token,并与浏览器携带的token进行比对,进而就得到用户是否以登录。
我们代码实现一下:
1.登录时设置一个token返回个浏览器
后端代码
2.将token存在浏览器的localstorage 浏览器任意页面都可以拿到这个数据
前端代码
3.设置axios的请求和响应拦截器
请求拦截器: 在每次发送异步请求时都从localstorage中获取token,并将其设置在请求头里
请求拦截器
响应拦截器: 每次响应前判断响应flag是否为false,如果未登录,跳转登录页面
响应拦截器
将以上两个拦截器添加到一个js文件中,以后要用只要导入js即可;
4. 在请求到达controller时,先拿到请求头的token,在根据token从redis中查询是否有这个对象,没有直接返回登录页面;