Springboot + JWT-Token 生成与解析

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。

  • 图示:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hF1BTr0M-1611545748247)(./images/2021-01-25_jwt-token-parse.png)]

  • 防范:jwt破解前提获取私钥或者私钥设置比较简单;同理作为防范,要保存好私钥,同时私钥设置不要太简单。

后记

参考地址:

  1. 几种常用的认证机制
  2. 什么是 JWT – JSON WEB TOKEN
  3. 五分钟带你了解啥是JWT

本项目为参考某马视频开发,相关视频及配套资料可自行度娘或者联系本人。上面为自己编写的开发文档,持续更新。欢迎交流,本人QQ:806797785

    后端JAVA源代码地址:https://gitee.com/gaogzhen/ihrm-parent    // 后端项目
前端项目源代码地址:https://gitee.com/gaogzhen/ihrm-vue    // 前端后台管理系统
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gaog2zh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值