使用jjwt 测试token

使用jjwt 测试token

token可以理解为将特定信息进行加密后的一个密文(字符串),采用指定的密钥才可以将其进行解密得到信息。其加密信息可以是用户名、subject等。

1、github地址

https://github.com/jwtk/jjwt

2、测试(二三依赖暂为用到)


    io.jsonwebtoken
    jjwt-api
    0.11.1


    io.jsonwebtoken
    jjwt-impl
    0.11.1
    runtime


    io.jsonwebtoken
    jjwt-jackson 
    0.11.1
    runtime

key,采用对称加密(加密解密同一个key)

SecretKey key = Keys.secretKeyFor(SignatureAlgorithm.HS256);

// 生成token,参数可以自定义
private String createJWT(String id, String issuer, String subject, long ttlMillis,SecretKey key) {

    long nowMillis = System.currentTimeMillis();
    Date now = new Date(nowMillis);

    JwtBuilder builder = Jwts.builder().setId(id)
            .setIssuedAt(now)
            .setSubject(subject)
            .setIssuer(issuer)
            .signWith(key);

    long expMillis = nowMillis + ttlMillis;
    Date exp = new Date(expMillis);
    builder.setExpiration(exp);
    
    return builder.compact();
}
//解析token
private void parseJWT(String jwsString, SecretKey key) {
    Jws jws;
    jws = Jwts.parserBuilder()
            .requireSubject("aa")
            .setSigningKey(key) // <----
            .build()
            .parseClaimsJws(jwsString);

    System.out.println();
    System.out.println(jws.getBody().isEmpty());
    System.out.println("解析一次");
    System.out.println(jws.getBody().getId());
    System.out.println(jws.getBody().getIssuer());
    System.out.println(jws.getBody().getSubject());
    System.out.println(jws.getBody().getIssuedAt());
    System.out.println(jws.getBody().getExpiration());
}


 @RequestMapping("getToken")
 public String testToken(String id, String issuer, String subject){
     return  createJWT(id,issuer,subject,60_000,key);

 }
@RequestMapping("checkToken")
public void checkToken(@RequestParam String jwt ){
     parseJWT(jwt,key);
}

你可能感兴趣的:(信息安全)