企业名称查询网站,注册公司名字推荐,百度指数查询官方网,php mysql网站开发项目1、介绍
jwt就是将原始的json数据格式进行了安全的封装#xff0c;这样就可以直接基于jwt在通信双方安全的进行信息传输了。
2、jwt组成
第一部分#xff1a;Header(头#xff09;#xff0c; 记录令牌类型、签名算法等。 例如#xff1a;{alg:HS256…1、介绍
jwt就是将原始的json数据格式进行了安全的封装这样就可以直接基于jwt在通信双方安全的进行信息传输了。
2、jwt组成
第一部分Header(头 记录令牌类型、签名算法等。 例如{alg:HS256,type:JWT}
第二部分Payload(有效载荷携带一些自定义信息、默认信息等。 例如{id:1,username:Tom}
第三部分Signature(签名防止Token被篡改、确保安全性。将header、payload并加入指定秘钥通过指定签名算法计算而来。
3、目的
签名的目的就是为了防jwt令牌被篡改而正是因为jwt令牌最后一个部分数字签名的存在所以整个jwt 令牌是非常安全可靠的。一旦jwt令牌当中任何一个部分、任何一个字符被篡改了整个令牌在校验的时候都会失败所以它是非常安全可靠的。
4、引以赖
!-- JWT依赖--
dependencygroupIdio.jsonwebtoken/groupIdartifactIdjjwt/artifactIdversion0.9.1/version
/dependency
5、工具类
public class JwtUtils {private static String signKey islunatic;//签名密钥private static Long expire 43200000L; //有效时间/*** 生成JWT令牌* param claims JWT第二部分负载 payload 中存储的内容* return*/public static String generateJwt(MapString, Object claims){String jwt Jwts.builder().addClaims(claims)//自定义信息有效载荷.signWith(SignatureAlgorithm.HS256, signKey)//签名算法头部.setExpiration(new Date(System.currentTimeMillis() expire))//过期时间.compact();return jwt;}/*** 解析JWT令牌* param jwt JWT令牌* return JWT第二部分负载 payload 中存储的内容*/public static Claims parseJWT(String jwt){Claims claims Jwts.parser().setSigningKey(signKey)//指定签名密钥.parseClaimsJws(jwt)//指定令牌Token.getBody();return claims;}
}6、用例 JWT令牌存储在浏览器的本地存储空间local storage中了
RestController
Slf4j
public class LoginController {//依赖业务层对象Autowiredprivate EmpService empService;PostMapping(/login)public Result login(RequestBody Emp emp) {//调用业务层登录功能Emp loginEmp empService.login(emp);//判断登录用户是否存在if(loginEmp !null ){//自定义信息MapString , Object claims new HashMap();claims.put(id, loginEmp.getId());claims.put(username,loginEmp.getUsername());claims.put(name,loginEmp.getName());//使用JWT工具类生成身份令牌String token JwtUtils.generateJwt(claims);return Result.success(token);}return Result.error(用户名或密码错误);}
}
7、注意
名称类型是否必须默认值备注其他信息codenumber必须响应码, 1 成功 ; 0 失败msgstring非必须提示信息datastring必须返回的数据 , jwt令牌