一、maven坐标
<!-- JWT依赖 --><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version></dependency><dependency><groupId>com.auth0</groupId><artifactId>java-jwt</artifactId><version>4.4.0</version></dependency>
二、配置项
在application.yml文件中添加
config:jwt:# 加密密钥secret: 自己生成# token有效时长,单位秒expire: 3600
三、配置文件
/*** JWT的token,区分大小写*/
@ConfigurationProperties(prefix = "config.jwt")
@Component
@Setter
@Getter
public class JwtConfig {private String secret;private long expire;/*** 生成token* * @param subject* @return*/public String createToken(String subject) {Date nowDate = new Date();Date expireDate = new Date(nowDate.getTime() + expire * 1000);// 过期时间return Jwts.builder().setHeaderParam("typ", "JWT").setSubject(subject).setIssuedAt(nowDate).setExpiration(expireDate).signWith(SignatureAlgorithm.HS512, secret).compact();}/*** 获取token中注册信息* * @param token* @return*/public Claims getTokenClaim(String token) {try {return Jwts.parser().setSigningKey(secret).parseClaimsJws(token).getBody();} catch (SignatureException e) {e.printStackTrace();throw new 自定义异常类("非法请求");} catch (ExpiredJwtException e) {e.printStackTrace();throw new 自定义异常类("登录已过期");} catch (Exception e) {e.printStackTrace();throw e;}}/*** 获取subject*/public String getSubjectFromToken(String token) {return getTokenClaim(token).getSubject();}}
四、使用
//需要的地方注入
@Autowired
private JwtConfig jwtConfig;@ApiOperation("JWT登录")
@GetMapping("loginJWT")
public ResponseBo loginJWT(HttpServletRequest request, String phone) {//返回TOKEN用于其他系统认证,不一定一定要传phone,按自己需求修改String jwtToken = jwtConfig.createToken(phone);return ResponseBo.success().data(jwtToken);
}@ApiOperation("验证")
@GetMapping("getInfo")
public ResponseBo getInfo(HttpServletRequest request){//我这里让前端放入header里面传给我,可以按照需求修改String token = request.getHeader("token");String phone = jwtConfig.getSubjectFromToken(token);return ResponseBo.success().data(phone);
}