`

写了一个jwt的类,但是没有达到网页上的效果

    博客分类:
  • jwt
 
阅读更多
package com.test.jwt;

import java.io.UnsupportedEncodingException;
import java.security.Key;
import java.util.Base64;
import java.util.Date;

import javax.crypto.spec.SecretKeySpec;
import javax.xml.bind.DatatypeConverter;

import org.junit.Test;

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

public class JwtHelper {
	
	//Token过期时间
	private final static int expiresSecond = 172800000;

	/*
	 * 把秘钥转成base64格式
	 */
	@Test
	public static String base64for(String keyText) throws UnsupportedEncodingException {
		final Base64.Decoder decoder = Base64.getDecoder();
		final Base64.Encoder encoder = Base64.getEncoder();

		final byte[] keyByte = keyText.getBytes("UTF-8"); // base64Secret.getBytes("UTF-8");
		// 编码
		final String encodedKey = encoder.encodeToString(keyByte);

		//System.out.println("加密后秘钥  " + encodedKey);
		// 解base64码
		//System.out.println("解密后秘钥  " + new String(decoder.decode(encodedKey), "UTF-8"));

		return encodedKey;
	}

	// 根据秘钥,解密jwt加密内容,转成实体Claim,就可以从Claim中取出内容。Claims实际上是个Map
	public static Claims parseJWT(String jsonWebToken, String encodedKey) {
		try {
			Claims claims = Jwts.parser().setSigningKey(DatatypeConverter.parseBase64Binary(encodedKey))
					.parseClaimsJws(jsonWebToken).getBody();
			return claims;
		} catch (Exception ex) {
			ex.printStackTrace();
			return null;
		}
	}

	/*
	 *根据秘钥以及设置的内容,建立 jwt字符串
	 */
	public static String createJWT(String sub, String name, String orgnization,String role[],
			String scope[], String iat,String encodedKey) {
		SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;

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

		// 生成签名密钥
		byte[] apiKeySecretBytes = DatatypeConverter.parseBase64Binary(encodedKey);
		Key signingKey = new SecretKeySpec(apiKeySecretBytes, signatureAlgorithm.getJcaName());

		// 设置要添加的参数"alg": "HS256",
		JwtBuilder builder = Jwts.builder().setHeaderParam("typ", "JWT").setHeaderParam("alg", "HS256")
				.claim("sub", sub)
				.claim("name", name)
				.claim("orgnization", orgnization)
				.claim("role", role)
				.claim("scope", scope)	
				.claim("iat", iat)
				.signWith(signatureAlgorithm, signingKey);
		
		// 添加Token过期时间
		if (expiresSecond >= 0) {
			long expMillis = nowMillis + expiresSecond;
			Date exp = new Date(expMillis);
			builder.setExpiration(exp).setNotBefore(now);
		}

		// 生成JWT字符串
		return builder.compact();
	}

	public static void main(String[] args) throws UnsupportedEncodingException {
		
		String myKey =base64for("abc");
 
		String[] role= {"user","contributor","admin"};
		String[] scope= {"mine","orgnization","platform"};
		String iat="1516239022";
		
		String jwt = createJWT("9123657", "张三", "XX信息中心", role,scope,iat,myKey);
		System.out.println("jwt加密后的   " + jwt);

		String jwtString = jwt;
		Claims cla = parseJWT(jwtString, myKey);//Claims实际上是个Map

		
		//下面是取出来的内容
		System.out.println(cla.get("sub"));
		System.out.println(cla.get("name"));
		System.out.println(cla.get("orgnization"));
		System.out.println(cla.get("role"));
		System.out.println(cla.get("scope"));
		System.out.println(cla.get("iat"));
		
	}

}

 写个一个jwt的demo ,然而和https://jwt.io/上的效果不太一样,先忙别的了,对jwt了解还是不深

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics