生成jwt令牌

在pom.xml文件引入jwt的Maven依赖

 <dependency>
      <groupId>io.jsonwebtoken</groupId>
      <artifactId>jjwt</artifactId>
      <version>0.9.1</version>
 </dependency>

生成jwt令牌

   //    测试生成jwt
    @Test
    public void getJWT() {
        HashMap<String, Object> claims = new HashMap<>(); // 自定义数据 键值对集合
        claims.put("id", 1);
        claims.put("username", "admin");
        String jwt = Jwts.builder()
                .signWith(SignatureAlgorithm.HS256, "hello")// 密钥 使用HS256算法,hello为自定义密钥
                .setClaims(claims)// 存放自定义数据
                .setExpiration(new Date(System.currentTimeMillis() + 3600 * 1000)) // 设置过期时间 获取当前时间并加1小时 3600 *1000是一小时的毫秒
                .compact();// 通过compact()方法生成jwt令牌
        System.out.println(jwt);
    }

解析jwt令牌

  //    解析jwt令牌
    @Test
    public void parseJWT() {
        String token = "eyJhbGciOiJIUzI1NiJ9.eyJpZCI6MSwiZXhwIjoxNzI2MDY1NjQ3LCJ1c2VybmFtZSI6ImFkbWluIn0.Wj6nxUS_PTv14DQjU4ugndFAgWxwt1pSwF5TIenzqOI"; //生成的jwt令牌
        Claims claims = Jwts.parser()
                .setSigningKey("hello")// 设置密钥对应的就是自定义的密钥
                .parseClaimsJws(token)// 解析token
                .getBody();// 获取自定义数据 就是生成令牌时存的HashMap的键值对集合
        System.out.println(claims);
    }

可以将生成JWT和解析JWT封装一个工具类JwtUtils中

package com.itheima.utils;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.util.Date;
import java.util.Map;

public class JwtUtils {
    private static String signKey = "hello";
    private static Long expire = 43200000L; // 设置过期时间12个小时

    //    生成JWT令牌
    public static String createJWT(Map<String, Object> claims) {
        String token = Jwts.builder()
                .signWith(SignatureAlgorithm.HS256, signKey)
                .setClaims(claims)
                .setExpiration(new Date(System.currentTimeMillis() + expire))
                .compact();
        return token;
    }

    // 解析JWT令牌
    public static Claims parseJWT(String token) {
        Claims claims = Jwts.parser()
                .setSigningKey(signKey)
                .parseClaimsJws(token)
                .getBody();
        return claims;

    }

}

### 和风天气API中的JWT令牌生成 在和风天气的服务中,为了实现安全的身份验证机制,采用JSON Web Token (JWT)[^1]作为访问凭证。对于开发者而言,在调用和风天气API之前,需先通过合法途径获得此令牌。 通常情况下,生成用于和风天气API的JWT涉及以下几个方面: - **密钥准备**:确保拥有由和风天气官方提供的唯一应用ID(`APPID`)以及对应的签名秘钥(`APPSecretKey`)。这些信息可在注册成为开发者并创建项目后获取到。 - **载荷构建**:定义Token的有效负载部分,这其中包括但不限于签发者(`iss`)、主题(`sub`)、过期时间(`exp`)等声明字段。针对和风天气API的具体需求来设置相应的参数值。 - **签名算法选择**:决定使用何种哈希算法对头部与载荷数据进行加密处理,默认推荐HS256。 下面给出一段Python代码示例展示如何基于上述要素构造适用于和风天气接口请求的JWT字符串: ```python import time import jwt def create_jwt(app_id, app_secret_key): payload = { 'iss': app_id, 'iat': int(time.time()), # 当前时间戳 'exp': int(time.time()) + 86400 * 7 # 设置token有效期为7天 } token = jwt.encode(payload=payload, key=app_secret_key, algorithm='HS256') return token.decode('utf-8') if isinstance(token, bytes) else token if __name__ == '__main__': APP_ID = "your_app_id" SECRET_KEY = "your_secret_key" print(create_jwt(APP_ID, SECRET_KEY)) ``` 需要注意的是实际开发过程中应妥善保管好自己的`APPID`和`SecretKey`,防止泄露造成安全隐患;同时也要遵循和风天气平台的相关规定合理利用API资源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值