java json web token_JAVA结合 JSON Web Token(JWT) 工具类

本文档介绍了一个JAVA实现的JSON Web Token(JWT)工具类,包括生成JWT、解析JWT、验证JWT及生成主题内容的方法。通过使用`SignatureAlgorithm.HS256`进行签名,并提供了自定义有效期的选项。此外,还展示了如何从HttpServletRequest中获取并验证token。
摘要由CSDN通过智能技术生成

packagecom.fh.util;import io.jsonwebtoken.*;importorg.codehaus.jackson.map.ObjectMapper;importjavax.crypto.SecretKey;importjavax.crypto.spec.SecretKeySpec;importjavax.servlet.http.HttpServletRequest;importjava.util.Date;importjava.util.UUID;public classJWTUtils {//服务器的kye.用户做加解密的key数据。

private static final String JWT_SECERT="jwt_secert";private static final ObjectMapper MAPPER=newObjectMapper();public staticSecretKey generalKey(){try{byte[] encodedKey=JWT_SECERT.getBytes("UTF-8");

SecretKey key=new SecretKeySpec(encodedKey,0,encodedKey.length,"AES");returnkey;

}catch(Exception e){

e.printStackTrace();

}return null;

}/*** 签发JWT,创建token的方法

*@paramid jwt的唯一标识,主要用来做一次性token。

*@paramiss jwt签发者

*@paramsubject jwt所面向的用户。一般使用用户的登录名

*@paramttlMillis 有效期,单位毫秒

*@returntoken 是为一个用户的有效登录周期准备的一个tkoen 。用户推出或超时,token失效*/

public static String createJWT(String id,String iss,String subject,longttlMillis){try{

SignatureAlgorithm signatureAlgorithm=SignatureAlgorithm.HS256;long nowMilllis =System.currentTimeMillis();

Date now=newDate(nowMilllis);

SecretKey secretKey=generalKey();

JwtBuilder builder=Jwts.builder()

.setId(id)

.setIssuer(iss)

.setSubject(subject)

.setIssuedAt(now)//token生成时间

.signWith(signatureAlgorithm,secretKey);//设置密匙和算法

if (ttlMillis>0){long expMillis=nowMilllis+ttlMillis;

Date expDate=newDate(expMillis);

builder.setExpiration(expDate);

}returnbuilder.compact();

}catch(Exception e){

e.printStackTrace();

}return null;

}/*** 解析JWT字符串

*@paramjwt 就是生成的toekn

*@return

*/

public staticClaims parseJWT(String jwt){

SecretKey secretKey=generalKey();returnJwts.parser()

.setSigningKey(secretKey)

.parseClaimsJws(jwt)

.getBody();

}/*** 验证jwt

*@paramjwtStr

*@return

*/

public staticString validateJWT(String jwtStr){

Claims claims=null;try{

claims=parseJWT(jwtStr);//成功

}catch(ExpiredJwtException e){//token过期

e.printStackTrace();

}catch(SignatureException e){//签名错误

e.printStackTrace();

}catch(Exception e){

e.printStackTrace();

}return null;

}public staticString generalSubject(Object subject){try{returnMAPPER.writeValueAsString(subject);

}catch(Exception e){

e.printStackTrace();

}return null;

}/*** 使用 ——— 生成token*/

public voidlogin(){//生成

String jwtToken=JWTUtils.createJWT(UUID.randomUUID().toString(),"test-jwt",JWTUtils.generalSubject(user.getUsername),1*60*1000);

}/*** 获取接口放在header中的token

*@paramrequest*/

public voidtest(HttpServletRequest request){

String token=request.getHeader("Authorization");//生成的token

String result=JWTUtils.validateJWT(token);//验证

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值