Springboot + JWT-Token 生成与解析
目录
内容
1、认证机制
认证机制部分不在详述,可参考以下博文:几种常用的认证机制
这里我们选择 Token Auth认证的方式。
2、JWT
选择了token认证的方式,但是又不希望身份信息以明文形式传输,我们选择JWT生成token。那么JWT是什么?又又什么优势呢?
参考地址:
什么是 JWT – JSON WEB TOKEN
五分钟带你了解啥是JWT
3、springboot 集成 jwt
因为我们工程框架位springboot,要使用jwt自然要集成。
-
pom.xml引入依赖
<dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.9.0</version> </dependency>
-
appliation.yml配置参数:私钥key和ttl过期时间
ihrm: jwt: config: key: ihrm-company ttl: 3600000
-
工具类JwtUtils:主要包括token生成与解析,代码如下
package com.ihrm.common.utils; import io.jsonwebtoken.*; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import java.util.Date; import java.util.Map; @Data @ConfigurationProperties("ihrm.jwt.config") public class JwtUtils { /** * 私钥 */ private String key; /** * token失效时间 */ private Long ttl; /** * 生成token * * @param id 用户id * @param name 用户名称 * @param map 参数 * @return token */ public String createJwt(String id, String name, Map<String, Object> map) { // 设置失效时间 long l = System.currentTimeMillis(); long exp = l + ttl; // 创建 JwtBuilder JwtBuilder jwtBuilder = Jwts.builder().setId(id).setSubject(name) .setIssuedAt(new Date()) .signWith(SignatureAlgorithm.HS256, key); // 设置claims map.forEach(jwtBuilder::claim); jwtBuilder.claim("userId", id); // jwtBuilder.setClaims(map); jwtBuilder.setExpiration(new Date(exp)); // 生成token return jwtBuilder.compact(); } /** * 解析token 获取Claims * * @param token jwt生成的token * @return Claims */ public Claims parseJwt(String token) { return Jwts.parser().setSigningKey(key).parseClaimsJws(token).getBody(); } }
4、JWT token在线解析
-
地址:JWT token解析网站(破解网站),https://jwt.io/#debugger。
-
图示:
-
防范:jwt破解前提获取私钥或者私钥设置比较简单;同理作为防范,要保存好私钥,同时私钥设置不要太简单。
后记 :
参考地址:
本项目为参考某马视频开发,相关视频及配套资料可自行度娘或者联系本人。上面为自己编写的开发文档,持续更新。欢迎交流,本人QQ:806797785
后端JAVA源代码地址:https://gitee.com/gaogzhen/ihrm-parent // 后端项目
前端项目源代码地址:https://gitee.com/gaogzhen/ihrm-vue // 前端后台管理系统