spring boot java jwt,在SpringBoot中使用JWT

JWT概述

JWT简介

JSON Web Token(JWT)是一种开放的标准(RFC 7519),它定义了一种紧凑的和自包含的方式,用于在JSON对象之间安全传输信息。该信息可以被验证和信任,因为它是数字签名的。JWT可以使用密钥HMAC算法或RSA或ECDSA来签名。

JWT应用场景

授权:这是使用JWT最常见的方案。当用户登录后,每个后续请求将会在header带上JWT,允许用户访问允许使用该令牌的路由、服务和资源。单点登录是当今广泛使用JWT的一个特性,因为它具有较小的开销和易于跨不同域使用的能力。

信息交换:JWT是保证各方之间安全地传输信息的一种好方法。因为JWT可以被签名,例如使用公钥/私钥对,可以确保发件人是他们所说的人。另外,由于使用header和playload计算签名,还可以验证内容是否被篡改。

文本主要介绍如何在SpringBoot中使用,更多的JWT信息可参考RFC文档或者查看《JSON Web Token 入门教程》

在SpringBoot使用JWT

本文的开发环境信息为:Spring Boot 2.x、Java JWT3.3.0

首先在项目工程中引用Java JWT

com.auth0

java-jwt

3.3.0

这里将使用HMAC算法来实战。创建JWT的关键代码如下:

public String createJWT(Map data) {

//Header信息

Map headerClaims = new HashMap<>();

//类型

headerClaims.put("typ", "JWT");

//算法名称

headerClaims.put("alg", "HS256");

//密钥

JWTCreator.Builder builder = JWT.create().withHeader(headerClaims);

Set> entrySet = data.entrySet();

//自定义Payload字段

for (Map.Entry entry : entrySet) {

builder.withClaim(entry.getKey(), entry.getValue());

}

Calendar expiredTime = Calendar.getInstance();

expiredTime.add(Calendar.SECOND, jwtConfig.getExpiredTime());

try {

String token = builder

//签发人

.withIssuer("Trial")

//签发时间

.withIssuedAt(new Date())

// 过期时间

.withExpiresAt(expiredTime.getTime())

// 创建时间

.withIssuedAt(new Date())

// 签名

.sign(Algorithm.HMAC256(jwtConfig.getJwtSecret()));

logger.debug("create token:{}", token);

return token;

} catch (Exception e) {

logger.error(e.getMessage(), e);

throw new RuntimeException("JWT签名错误!" + e.getMessage(), e);

}

}

验证JWT的代码如下:

@Override

public Map verfiyJWT(String token) {

JWTVerifier verifier = null;

try {

verifier = JWT.require(Algorithm.HMAC256(jwtConfig.getJwtSecret())).build();

} catch (Exception e) {

logger.error(e.getMessage(), e);

throw new RuntimeException("jwt操作失败", e);

}

DecodedJWT jwt = null;

try {

jwt = verifier.verify(token);

} catch (TokenExpiredException e) {

throw new RuntimeException("jwt已过期", e);

} catch (Exception e) {

logger.error(e.getMessage(), e);

throw new RuntimeException("jwt验证错误", e);

}

Map claimMap = jwt.getClaims();

return claimMap;

}

以上只是把核心的代码介绍了一下,有了这个,就很容易个shiro整合了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值