单机的Tomcat应用登录校验:
用户首次登录成功后,服务端会创建一个Session会话,客户端会生成一个sessionid,客户端会把sessionid保存到cookie里,每次请求都携带这个sessionid,服务端通过校验来判断是拦截还是放行
分布式应用中Session共享登录校验:
真实的应用不可能单节点部署,所以就有多个节点登录session共享的问题需要解决。tomcat支持session共享,但是有广播风暴;尤其用户量大的时候,占用资源非常严重
推荐使用Redis来存储token:
服务端使用UUID生成随机64位或者128位token,放入redis中,然后返回给客户端并存储在cookie中,用户每次访问都携带此token,服务端去redis中校验是否有此用户即可
分布式应用登录校验解决方案Json Web Token
Jwt是一个开放标准,他定义了一种用于简洁,自包含的用于通信双方之间以Json对象的形式安全传递信息的方法,可以使用HMAC算法或者RSA的公钥对其签名
简单来说,就是通过一定规范生成token,然后通过解密算法逆向解密,就可以获得用户信息
Json Web Token的封装通用方法,JwtTokenUtil
public class JwtTokenUtil {
public static final String TOKEN_HEADER = "Authorization";// token header
public static final String TOKEN_PREFIX = "Bearer ";
private static final String SECRET = "gkadmin";// 密钥
private static final String ISS = "gkadmin";
private static final String ROLE_CLAIMS = "claims";
private static final long EXPIRATION = 12*3600L;// 3600L;// 时间
//创建token
public static String createToken(String username) {
String jwt = Jwts