WQhuanm
登录认证的几种基本方式

登录认证的几种基本方式

一,session

1. 合法用户登录时,会将其用户信息存到session中

1
session.setAttribute("user",user);

2. 当处理需要权限的请求时,拦截器会查看session是否存在用户信息,有则放行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//1.获取session中的用户
HttpSession session = request.getSession();
Object user = session.getAttribute("user");
//3.判断用户是否存在
if(user == null){
//4.不存在,拦截,返回401状态码
response.setStatus(401);
return false;
}
//5.存在,保存用户信息到Threadlocal,以便后面从线程提取用户信息
UserHolder.saveUser((User)user);
return true;
}
}

//附UserHolder类
public class UserHolder {
private static final ThreadLocal<UserDTO> tl = new ThreadLocal<>();
public static void saveUser(UserDTO user){
tl.set(user);
}
public static UserDTO getUser(){
return tl.get();
}
public static void removeUser(){
tl.remove();
}
}

3,session共享在分布式系统下的局限及其解决方案

分布式系统下,服务器与服务器之间是隔离的,它们的session是不共享的,这就存在session同步的问题

  1. 可以在不同服务器上session数据进行复制
  2. 使用session集中存储(session信息存入redis,memcached,hbase等)

二,Token

用户登录时,会将用户信息存入redis中并生成一个随机串token作为内容的key,并把token返回给用户

三,JWT

JWT依据某种规则将用户信息存储在一个JWT令牌中,内含过期时间。

因此服务器无需存储jwt信息,也从而导致用户注销后token仍然有效而存在风险

本文作者:WQhuanm
本文链接:https://wqhuanm.github.io/Issue_Blog/2025/01/25/3_登录认证的几种基本方式/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可