赞
踩
jwt 全称是jsonWebToken, 简单的说就是一种能够携带信息的token。
在传统的web环境中,浏览器和后端通过记录在浏览器的cookie 和存储在服务端的session 来实现登录状态,而cookie session的方式在多分布式环境下可能带来session复制,跨域访问,单点登录等问题;
直接使用后端生成token的方式,服务端也需要存储生成的token信息,因为token是无意义的。而使用jwt ,能够携带一些必要得信息比如用户id 和用户名称等;
后端就不需要对生成的token做存储,同时jwt也有时间的有效期。能够做到请求接口无状态;
缺点:
jwt 官网: https://jwt.io/
在使用过程中是一个base64编码的字符串
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
此字符串通过逗号分割是由3部分组成
第一部分是 header 区域,只要表示当前签名的加密方式;
第二部分是 plaoyload 区域,存储了当前的token携带的信息,包含颁发给谁,有效期等
第三部分是 将前2部分通过加密生成的,主要用于服务端校验token的合法性;
引用对应的依赖,关于jwt的工具类有很多,这里使用 https://github.com/jwtk/jjwt
引入maven依赖
<!--api->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-api</artifactId>
<version>0.11.2</version>
</dependency>
<!---实现-->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-impl</artifactId>
<version>0.11.2</version>
<scope>runtime</scope>
</dependency>
//设置自定义header 信息 JwtBuilder jwtBuilder = Jwts.builder().setHeaderParam("a", "b"); Calendar instance = Calendar.getInstance(); instance.add(Calendar.MINUTE,30); Date expire = instance.getTime(); //设置playload信息 jwtBuilder = jwtBuilder.setIssuer("me") //谁颁发的 .setSubject("Bob") // token的主体是什么 ,是关于什么的 .setAudience("you") // 给谁的 .setExpiration(expire) //失效时间 .setNotBefore(new Date()) //不能在此时间之前获取 .setIssuedAt(new Date()) //签发时间 .setId(UUID.randomUUID().toString());//id //设置自定义的playload信息 jwtBuilder.claim("key","value"); //构建签名算法,更多签名算法查看 SignatureAlgorithm Key key = Keys.secretKeyFor(SignatureAlgorithm.HS256); jwtBuilder = jwtBuilder.signWith(key); //执行压缩 使生成的字符串变小 jwtBuilder = jwtBuilder.compressWith(CompressionCodecs.DEFLATE); System.out.println(jwtBuilder.compact());
JwtParserBuilder jwtParserBuilder = Jwts.parserBuilder();
//设置解析的签名算法
jwtParserBuilder = jwtParserBuilder.setSigningKey(key);
Jws<Claims> claimsJws = jwtParserBuilder.build().parseClaimsJws(jwtStr);
String signature = claimsJws.getSignature();
System.out.println("<========>");
Syste
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。