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了解还是不深
相关推荐
在IT行业中,登录页面设计是用户体验的重要组成部分,尤其在网页和应用程序中,它通常是用户与系统交互的第一步。"酷黑登录页面效果案例"是一个专为展示深色主题登录界面设计的示例,这种设计风格通常被称为“酷黑”...
【支付成功页面】是网页开发中的一个重要组成部分,尤其在电商、金融和其他涉及在线交易的网站中,支付成功页面是用户完成购买流程后看到的关键界面。这个页面的设计和功能直接影响到用户的体验感和对平台的信任度。...
【后台管理系统登录页面】的设计与实现是Web开发中的一个关键环节。登录页面是用户进入后台管理系统的第一步,因此它的设计需要既美观又实用,能够提供良好的用户体验并确保数据安全。以下是一些关于创建高效后台...
当然,也可以选择通过自定义CSS样式来达到同样的效果。 ### 后端技术构架 在后端的开发上,系统的构建可能依赖于Java、Python、Node.js等服务器端编程语言,并结合Spring Boot、Django、Express等后端框架来完成。...
博客管理系统是一种专为个人或团队提供在线发布、管理和分享文章的平台。它通常包含用户注册登录、文章创建...通过对这些知识点的深入理解和实践,你可以逐步改善系统的设计,使其在功能性和视觉效果上达到更高的水平。
《京东手机网站首页源码解析与技术探讨》 京东作为国内知名的电商平台,其手机端网站的构建无疑是移动互联网领域的典范之一。...对于学习和研究移动网页开发的人员,这是一个深入了解和学习的宝贵实例。
同学录系统,通常是指一种在线平台,用于连接和管理校友之间的联系信息,分享回忆,以及组织各类活动。这种系统能够帮助人们保持与昔日同窗的联系...在实际项目中,还需要根据需求和资源调整技术选型,以达到最佳效果。
在这个项目中,我们可以学习到关于网页交互设计和动态效果实现的一些关键点。 首先,登录页面的设计应该简洁明了,易于用户理解和操作。通常,它包含用户名/邮箱输入框、密码输入框以及登录按钮。在这个项目中,...
综上所述,"BookLib"项目充分利用了JavaScript的灵活性和强大功能,从用户界面到后端逻辑,每一个环节都体现了JavaScript在现代Web开发中的核心地位。通过深入理解并熟练运用这些技术,我们可以构建出更强大、更高效...