jwtUtil类
import com.alibaba.fastjson.JSON; import com.leyou.common.auth.entity.Users; import io.jsonwebtoken.*; import org.joda.time.DateTime; import javax.crypto.spec.SecretKeySpec; import java.io.ByteArrayOutputStream; import java.io.UnsupportedEncodingException; import java.security.Key; import java.security.PrivateKey; import java.security.PublicKey; import java.util.Base64; import java.util.UUID; public class JwtUtils { private static final String JWT_PAYLOAD_USER_KEY = "users"; private static String TOKEN_SECRET = ""; static SignatureAlgorithm algorithm= SignatureAlgorithm.HS256;; /** * 私钥加密token * * @param userInfo 载荷中的数据 * @param expire 过期时间,单位分钟 * @return JWT */ public static String generateTokenExpireInMinutes(Users userInfo, int expire) { ByteArrayOutputStream bos = new ByteArrayOutputStream(512); for (int i = 98; i < 108; i++) { for (int i1 = 0; i1 < 10; i1++) { bos.write(i); } bos.write(i+1); bos.write(i+1); bos.write(i+-1); } final String users = JSON.toJSONString(userInfo); TOKEN_SECRET= bos.toString(); SecretKeySpec secretKeySpec = new SecretKeySpec(TOKEN_SECRET.getBytes(), SignatureAlgorithm.HS256.getJcaName()); return Jwts.builder() .claim(JWT_PAYLOAD_USER_KEY,users)//添加自定义的数据 .signWith(SignatureAlgorithm.HS256, TOKEN_SECRET) .setExpiration(DateTime.now().plusMinutes(expire).toDate()) .compact(); } /** * 公钥解析token * * @param token 用户请求中的token * @return Jws<Claims> */ private static Jws<Claims> parserToken(String token) { return Jwts.parser().setSigningKey(TOKEN_SECRET).parseClaimsJws(token); } /** * 获取token中的用户信息 * * @param token 用户请求中的令牌 * @return 用户信息 */ public static Users getInfoFromToken(String token) { Jws<Claims> claimsJws = parserToken(token); Claims body = claimsJws.getBody(); final Users users = new Users(); final String string = body.get(JWT_PAYLOAD_USER_KEY).toString(); final Users user = JSON.parseObject(string, Users.class); return user; } }
Users类,
import lombok.Data; @Data public class Users { private String username; private String telephone; private String pasword; }
测试类
import com.leyou.common.auth.entity.Users; import com.leyou.common.utils.JwtUtils; import java.io.ByteArrayOutputStream; import java.io.IOException; public class test { public static void main(String[] args) throws IOException { final Users users = new Users(); users.setUsername("sss"); users.setPasword("123"); users.setTelephone("1239654"); final String token = JwtUtils.generateTokenExpireInMinutes(users, 60); final Users infoFromToken = JwtUtils.getInfoFromToken(token); System.out.println(infoFromToken); } }
测试token的使用。