登录校验
- 会话技术
会话:
用户打开浏览器,访问web资源的时候,会话建立。直到一方断开连接,会话结束,一次会话中包含多次响应
会话跟踪:一种维护浏览器状态的方法,服务器需要识别多次请求是否来自同一浏览器,以便在多次会话中的多次数据共享
会跟踪方案:
客户端会话跟踪技术:Cookie
服务端会话跟踪技术:Session
令牌技术(主流技术)
浏览器与服务器交互使用的http协议,它是无状态的,即每条请求都是独立的,下一次请求不会携带上一次的数据
2.会话跟踪方案的对比
1.cookie
优点:http中协议支持的技术
缺点:1.移动端App无法使用cookie2.数据保存在客户端,不安全,用户可以在自己电脑禁用cookie 3.cookie不能实现跨域
跨域分为三个维度:协议、ip/域名、端口,有一者不同,则为跨域
2.session
优点:存储在服务器,安全性高
缺点:服务器集群环境下无法直接使用。Cookie的缺点
3.令牌技术
优点:
1.支持pc、移动端、小程序
2.解决集群服务器环境下的认证
3.减轻服务器存储的压力
缺点:
需要自己实现
jwt令牌(Json Web Token)
jwt官网
jwt:
定义了一种简介(即字符串)、自包含(即自定义)的格式,用于在通信双方以json数据格式的安全传输信息。这些信息是可靠的
jwt令牌的组成:
1.Header(头):记录令牌类型和签名算法。如:{“alg”:“HS256”,“type”:“JWT”}
2.Payload(有效载荷):携带一些自定义的信息 例如{“id”:“1”,“username”:“tom”}
3.Signature(签名):防止Token被篡改,确保安全性。将header、payload、并加入指定密钥,通过指定签名算法来计算
#主要用于登录认证
Jtw令牌的使用
- 导入jtw依赖
<denpendency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
2.生成jwt令牌
3.校验jwt令牌
//parseClaimsJwt(jwt),不需要解析签名
//parse(jwt),需要解析签名
public static Claims parseJWT(String jwt)
{
Claims claims=Jwts.parser().setSigningKey(signkey).parseClaimsJwt(jwt).getBody();
Claims claims = (Claims) Jwts.parser().setSigningKey(signkey).parse(jwt).getBody();
return claims;
}
错误解析
java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter
//按照以上步骤,如果还是报错的话,如果您的项目使用了 Maven 或 Gradle 等构建工具,请确保您的项目依赖项中包含了适用于 Java 9+ 的 JAXB 实现。在 Maven 中,您可以在 pom.xml 文件中添加以下依赖项:
<dependency>-->
<groupId>javax.xml.bind</groupId>-->
<artifactId>jaxb-api</artifactId>-->
<version>2.3.1</version>-->
</dependency>