src/main/java/cn/pzhu/pserson/util/TokenUtils.java

(开头部分) 3KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

package cn.pzhu.pserson.util;

import org.jose4j.jwk.RsaJsonWebKey;
import org.jose4j.jwk.RsaJwkGenerator;
import org.jose4j.jws.AlgorithmIdentifiers;
import org.jose4j.jws.JsonWebSignature;
import org.jose4j.jwt.JwtClaims;
import org.jose4j.jwt.consumer.InvalidJwtException;
import org.jose4j.jwt.consumer.JwtConsumer;
import org.jose4j.jwt.consumer.JwtConsumerBuilder;
import org.jose4j.lang.JoseException;

public class TokenUtils {

  private static RsaJsonWebKey rsaJsonWebKey;

  // 生成密钥
  static {
    try {
      rsaJsonWebKey = RsaJwkGenerator.generateJwk(2048);
    } catch (JoseException e) {
      e.printStackTrace();
    }
  }

  /**
   * @param issuer 发行者
   * @param audience 接收者
   * @param exprationTime 接受时间
   * @param notBeforeMinutesInThePast 过去有效时间
   */
  public static String create(String keyID, String issuer, String audience, String subject,
      int exprationTime, int notBeforeMinutesInThePast) throws JoseException {

    // key
    rsaJsonWebKey.setKeyId(keyID);

    //
    JwtClaims claims = new JwtClaims();
    claims.setIssuer(issuer);
    claims.setAudience(audience);
    // 过期时间设置为30分钟
    claims.setExpirationTimeMinutesInTheFuture(30);

    claims.setGeneratedJwtId();
    claims.setIssuedAtToNow();

    claims.setSubject(subject);
    claims.setNotBeforeMinutesInThePast(notBeforeMinutesInThePast);

    JsonWebSignature jws = new JsonWebSignature();
    jws.setPayload(claims.toJson());
    jws.setKey(rsaJsonWebKey.getPrivateKey());
    jws.setKeyIdHeaderValue(rsaJsonWebKey.getKeyId());
    jws.setAlgorithmHeaderValue(AlgorithmIdentifiers.RSA_USING_SHA256);

    String jwt = jws.getCompactSerialization();
    return jwt;
  }

后面还有 40 行代码,购买后查看完整代码

24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明

AI 解读 AI

登录后可用,每次 10 算力,解读结果公开显示在下面。

还没有人解读过这个文件。