概述
登录校验指的是,当我们的服务器接收到客户端发送的请求时,首先要对请求进行校验,校验用户是否已登录。如果未登录,不允许执行业务操作,跳转到登陆界面,要求登录成功后再允许执行业务操作;否则就直接执行对应的业务操作。
会话技术
会话
指的是用户打开浏览器,访问web服务器的资源,会话建立,直到有一方断开连接,会话结束。一次会话中可以包含多次的请求以及响应。
会话跟踪
一种用来维护浏览器状态的方法,服务器需要识别多次请求是否来自于同一浏览器,以便再同一次会话的多次请求之间共享数据。
会话跟踪方案
- 客户端会话跟踪技术:Cookie
- 服务端会话跟踪技术:Session
- 令牌技术
会话跟踪方案对比
Cookie
- 优点:HTTP协议中支持的技术
- 缺点:
- 移动端APP无法使用Cookie
- 不安全,用户可以自己禁用Cookie
- Cookie不可以进行跨域(主机必须均处于同一网段)
Session
- 优点:存储在服务端,安全
- 缺点:
- 服务器集群环境下无法直接使用Session
- Cookie的所有缺点
令牌技术
- 优点:
- 支持PC端、移动端
- 解决集群环境下的认证问题
- 减轻服务器端存储压力
- 缺点:需要自己实现
JWT令牌技术
全称
JSON Web Token(官网:https://jwt.io/)
定义了一种简洁、自包含的格式,用于在通信双方以JSON数据格式安全的传输信息。由于数字签名的存在,这些信息均是可靠的。
JWT令牌组成
- 第一部分: Header(头),记录令牌类型,签名算法等。例如:{"alg":"HS256", "type":"JWT"}。
- 第二部分: Payload(有效载荷),携带自定义、默认的信息等。例如:{"id":"1","username":"fhh"}。
- 第三部分: Signature(签名),防止Token被恶意篡改、确保其安全性。将Header、Payload,并加入指定密钥,通过指定签名算法计算而来。
生成 / 解析JWT令牌代码示例
package com.fhh.springboottlias.utils;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;
import java.util.Map;
public class JwtUtils {
private static String signKey = "fhhhh";
private static Long time = 43200000L; // 有效时间为12h
/*
* 生成JWT令牌
*/
public static String getJWT(Map<String, Object> claims){
String jwt = Jwts.builder()
.signWith(SignatureAlgorithm.HS256, signKey)
.addClaims(claims)
.setExpiration(new Date(System.currentTimeMillis() + time))
.compact();
return jwt;
}
/*
* 解析JWT令牌
*/
public static Claims parseJWT(String jwt){
Claims claims = Jwts.parser()
.setSigningKey(signKey)
.parseClaimsJws(jwt)
.getBody();
return claims;
}
}