您的位置 首页 java

Java,JWT,jjwt,系统之间交互场景,安全加密措施,工具类

背景说明

一个大的项目拆分成了几个子系统,系统之间进行交互,传输时为保证安全性,需要先认证后业务处理,这里选择token,使用jwt生成。

交互逻辑:子系统A(编号+秘钥)—-> 发起请求 —-> 子系统B(编号+秘钥),编号和秘钥统一配置。

代码实现

工具类

 <!-- JWT-->
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt</artifactId>
    <version>0.9.1</version>
</dependency>  
 import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jws;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import  java .util.Date;

public class JjwtTransferUtils {


    /**
     * @param subjectCode
     * @param secretKey
     * @param expireTime
     * @return
     */    public  static  String generateToken(String subjectCode, String secretKey, long expireTime) {
         String  JwtToken = Jwts.builder()
                .setSubject(subjectCode)
                .setIssuedAt(new Date())
                .setExpiration(new Date(System.currentTimeMillis() + expireTime))
                .signWith(SignatureAlgorithm.HS256, secretKey)
                .compact();
        return JwtToken;
    }

    /**
     * @param secretKey
     * @param token
     * @return
     */    public static Jws<Claims> parseToken(String secretKey, String token) {
        Jws<Claims> claimsJws = null;
        try {
            claimsJws = Jwts.parser().setSigningKey(secretKey).parseClaimsJws(token);
        } catch ( Exception  e) {
            e.printStackTrace();
        }
        return claimsJws;
    }

    /**
     * @param subjectCode
     * @param secretKey
     * @param token
     * @return
     */    public static boolean verifyToken(String subjectCode, String secretKey, String token) {
        if (subjectCode == null || "".equals(subjectCode)) {
            return false;
        }
        if (secretKey == null || "".equals(secretKey)) {
            return false;
        }
        if (token == null || "".equals(token)) {
            return false;
        }
        Jws<Claims> claimsJws = parseToken(secretKey, token);
        if (claimsJws == null) {
            return false;
        }
        if (subjectCode.equals(claimsJws.getBody().getIssuer())) {
            return true;
        }
        return true;
    }

}  

测试类

 public class JjwtTransferDemo {


    public static  void  main(String[] args) {
        String code = "ltxvNVaQ1uO7dt3W2Y1Q";
        String secret = "CNX3JobPVhNtClrVhzu";
        long expireTime = 60 * 60 * 1000;
        // 生成token
        String token = JjwtTransferUtils.generateToken(code, secret, expireTime);
        System.out.println("token=" + token);
        // 验证token
        boolean result = JjwtTransferUtils.verifyToken(code, secret, token);
        System.out.println("result=" + result);
    }

}  

文章来源:智云一二三科技

文章标题:Java,JWT,jjwt,系统之间交互场景,安全加密措施,工具类

文章地址:https://www.zhihuclub.com/176182.shtml

关于作者: 智云科技

热门文章

网站地图