# JQuicker **Repository Path**: giteeforsyf/jjwtutil ## Basic Information - **Project Name**: JQuicker - **Description**: 较为封装彻底的JWT工具类,使用jjwt - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: https://gitee.com/giteeforsyf/jjwtutil.git - **GVP Project**: No ## Statistics - **Stars**: 6 - **Forks**: 0 - **Created**: 2022-06-18 - **Last Updated**: 2023-06-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # JQuicker 正式改名JQuicker 旨在开箱即用,几乎无需任何学习成本,项目JDK:11 ## 升级详情 1. 允许使用HS384进行加密 2. 更改为JQuicker 3. 些许函数名称改变 4. 增加了加密密钥的丰富性 5. 优化了整体框架 6. 使用更加方便灵活 7. 将默认构造和实际构造分离 ## 使用方式(推荐) 下载后进入项目打包为maven依赖进行导入 ```xml cn.fly JQuicker 1.2.0-SNAPSHOT ``` ## 使用示例(默认构造器) ```java //构造 final val jQuicker = new JQuicker(); //设置使用默认构造器 jQuicker.defaultBuilder(); //设置token中存放的数据 final val hashMap = new HashMap(); hashMap.put("user","zhamsag"); //将数据设置到token中 jQuicker.setStoreData(hashMap); //构造token final val token = jQuicker.createToken(); System.out.println(token); ``` ## 使用示例(自定义构造) ```java //构造 final val jQuicker = new JQuicker(); //关闭默认构造器 jQuicker.defaultBuilder(false); //自定义加密算法 jQuicker.initSignatureAlgorithm(SignatureAlgorithm.HS384); //自定义加密密钥 jQuicker.initSecretKey(JWTDefaultSecretKey.HS384_SECRET_KEY); //自定义过期时间 jQuicker.initExpirationTime(JWTDefaultExpirationTime.HALF_MONTH); //设置数据 final val hashMap = new HashMap(); hashMap.put("user","zhamsag"); jQuicker.setStoreData(hashMap); //构造token final val token = jQuicker.createToken(); System.out.println(token); //解析荷载数据,可获取存储的数据 final val claims = jQuicker.analyzePayLoad(token); claims.forEach((s, o) -> System.out.println(s+":-:"+o)); //解析Header final val jwsHeader = jQuicker.analyzeHeader(token); System.out.println(jwsHeader); //获取过期时间(距离过期时间还剩多少) final val restTime = jQuicker.getRestTime(token, JWTDefaultExpirationTime.TimeUnit.HOUR); System.out.println(restTime); ``` ## 具体使用 请参看源码,源码中有全中文注释 ## 测试示例 ```java @Test void len(){ System.out.println(JWTDefaultSecretKey.HS384_SECRET_KEY.getValue().length()); } @Test void ran(){ final val jQuicker = new JQuicker(); final val defaultExpirationTimeToString = jQuicker.getDefaultExpirationTimeToString(JWTDefaultExpirationTime.TimeUnit.HOUR); System.out.println(defaultExpirationTimeToString); } @Test void tie(){ final val featureTimeStamp = JWTDefaultExpirationTime.getFeatureTimeStamp(JWTDefaultExpirationTime.DAY); System.out.println(featureTimeStamp); } @Test void tt(){ final val jQuicker = new JQuicker(); jQuicker.defaultBuilder(); final val hashMap = new HashMap(); hashMap.put("user","zhamsag"); jQuicker.setStoreData(hashMap); final val token = jQuicker.createToken(); System.out.println(token); } @Test void anl(){ final val jQuicker = new JQuicker(); jQuicker.defaultBuilder(); final val claims = jQuicker.analyzePayLoad("eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjoiemhhbXNhZyIsImNyZWF0ZSI6MTY2MDU2NTg0OTU4NywiZXhwIjoxNjYxMTcwNjQ5LCJpYXQiOjE2NjA1NjU4NDl9.hc2OiMI2xIZe_ccbY8jfyF3zd4ybLBC2TyUrIqftp4Y"); claims.forEach((s, o) -> System.out.println(s+":-:"+o)); System.out.println(jQuicker.analyzeExpirationOrNot("eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjoiemhhbXNhZyIsImNyZWF0ZSI6MTY2MDU2NTg0OTU4NywiZXhwIjoxNjYxMTcwNjQ5LCJpYXQiOjE2NjA1NjU4NDl9.hc2OiMI2xIZe_ccbY8jfyF3zd4ybLBC2TyUrIqftp4Y"));; } @Test void sad(){ final val jQuicker = new JQuicker(); jQuicker.defaultBuilder(false); jQuicker.initSignatureAlgorithm(SignatureAlgorithm.HS384); jQuicker.initSecretKey(JWTDefaultSecretKey.HS384_SECRET_KEY); jQuicker.initExpirationTime(JWTDefaultExpirationTime.HALF_MONTH); final val hashMap = new HashMap(); hashMap.put("user","zhamsag"); jQuicker.setStoreData(hashMap); final val token = jQuicker.createToken(); System.out.println(token); final val claims = jQuicker.analyzePayLoad(token); claims.forEach((s, o) -> System.out.println(s+":-:"+o)); final val jwsHeader = jQuicker.analyzeHeader(token); System.out.println(jwsHeader); final val restTime = jQuicker.getRestTime(token, JWTDefaultExpirationTime.TimeUnit.HOUR); System.out.println(restTime); } ``` ## 1.2.1版本更新预告 1. 优化架构 2. 提供链式方式调用 3. 更新HS512加密 # JJWTUtil工具类v1.1.2 JWT工具类,使用jjwt构造 ### 工具类具体简介 1. JJWTUtil:核心工具类! 2. JWTDefaultExpirationTime:默认时间枚举类(推荐直接调用) 3. JWTDefaultSecretKey:(默认密钥,当前提供2个,后续继续增加) ## 使用方法1(源码) 下载后直接将源码导入自己的项目中使用 ## 使用方法2 模块化为自己的本地依赖,通过依赖方式导入使用 ## 该工具类的简单调用(使用默认构造器) ```java JJWTUtil jjwtUtil = new JJWTUtil(); //通过工具类提供的默认构造器直接生成默认加密算法、加密密钥、持续周期 jjwtUtil.defaultBuilder(jjwtUtil); //设置传入的内容 Claims claims = Jwts.claims(); claims.put("user", "test01"); //构造token String token = jjwtUtil.createToken(claims); //获取payload Claims tokenPayLoad = jjwtUtil.getTokenPayLoad(token); //获取token剩余有效时间 Long tokenExpirationTime = jjwtUtil.getTokenExpirationTime(token); ``` ## 该工具类的简单调用(自定义) ```java JJWTUtil jjwtUtil = new JJWTUtil(); //设置持续时间 jjwtUtil.initExpirationTime(JWTDefaultExpirationTime.DAY); //设置密钥 jjwtUtil.initSecretKey(JWTDefaultSecretKey.DEFAULT_SECRET_KEY2); //设置加密算法 jjwtUtil.initSignatureAlgorithm(SignatureAlgorithm.HS256); //设置载荷 Claims claims = Jwts.claims(); claims.put("user", "test02"); //构造token String token = jjwtUtil.createToken(claims); ``` ## 注意事项 当前版本未适配HS256,RS256标准长度以上的加密算法 若需要使用HS512、HS384、RS384、RS384,请自己设定密钥(注意长度) ```java jjwtUtil.initSecretKey("testsajhdsdsjakadhjshdskdhjshd..."); ``` ## 具体使用 请参看源码,源码中有全中文注释 ## 1.2版本更新预告 1. 增加加密算法适配 2. 增加默认密钥结合加密算法适配 3. 增加直接格式化时间的剩余时间查询方法(更加直观)