`

写了一个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了解还是不深

分享到:
评论

相关推荐

    酷黑登录页面效果案例.zip

    在IT行业中,登录页面设计是用户体验的重要组成部分,尤其在网页和应用程序中,它通常是用户与系统交互的第一步。"酷黑登录页面效果案例"是一个专为展示深色主题登录界面设计的示例,这种设计风格通常被称为“酷黑”...

    支付成功页面

    【支付成功页面】是网页开发中的一个重要组成部分,尤其在电商、金融和其他涉及在线交易的网站中,支付成功页面是用户完成购买流程后看到的关键界面。这个页面的设计和功能直接影响到用户的体验感和对平台的信任度。...

    后台管理系统登录页面

    【后台管理系统登录页面】的设计与实现是Web开发中的一个关键环节。登录页面是用户进入后台管理系统的第一步,因此它的设计需要既美观又实用,能够提供良好的用户体验并确保数据安全。以下是一些关于创建高效后台...

    百战尚学堂在线考试系统.zip

    当然,也可以选择通过自定义CSS样式来达到同样的效果。 ### 后端技术构架 在后端的开发上,系统的构建可能依赖于Java、Python、Node.js等服务器端编程语言,并结合Spring Boot、Django、Express等后端框架来完成。...

    博客管理系统

    博客管理系统是一种专为个人或团队提供在线发布、管理和分享文章的平台。它通常包含用户注册登录、文章创建...通过对这些知识点的深入理解和实践,你可以逐步改善系统的设计,使其在功能性和视觉效果上达到更高的水平。

    京东手机网站首页源码

    《京东手机网站首页源码解析与技术探讨》 京东作为国内知名的电商平台,其手机端网站的构建无疑是移动互联网领域的典范之一。...对于学习和研究移动网页开发的人员,这是一个深入了解和学习的宝贵实例。

    同学录系统

    同学录系统,通常是指一种在线平台,用于连接和管理校友之间的联系信息,分享回忆,以及组织各类活动。这种系统能够帮助人们保持与昔日同窗的联系...在实际项目中,还需要根据需求和资源调整技术选型,以达到最佳效果。

    htochko.github.io:登陆

    在这个项目中,我们可以学习到关于网页交互设计和动态效果实现的一些关键点。 首先,登录页面的设计应该简洁明了,易于用户理解和操作。通常,它包含用户名/邮箱输入框、密码输入框以及登录按钮。在这个项目中,...

    BookLib

    综上所述,"BookLib"项目充分利用了JavaScript的灵活性和强大功能,从用户界面到后端逻辑,每一个环节都体现了JavaScript在现代Web开发中的核心地位。通过深入理解并熟练运用这些技术,我们可以构建出更强大、更高效...

Global site tag (gtag.js) - Google Analytics