java jwt的pom文件_SpringBoot集成JWT实现token验证

Jwt全称是:json web token。它将用户信息加密到token里,服务器不保存任何用户信息。服务器通过使用保存的密钥验证token的正确性,只要正确即通过验证。

优点

简洁: 可以通过URL、POST参数或者在HTTP header发送,因为数据量小,传输速度也很快;

自包含:负载中可以包含用户所需要的信息,避免了多次查询数据库;

因为Token是以JSON加密的形式保存在客户端的,所以JWT是跨语言的,原则上任何web形式都支持;

不需要在服务端保存会话信息,特别适用于分布式微服务。

缺点

无法作废已颁布的令牌;

不易应对数据过期。

一、Jwt消息构成

1.1 组成

一个token分3部分,按顺序为

头部(header)

载荷(payload)

签证(signature)

三部分之间用.号做分隔。例如:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiIxYzdiY2IzMS02ODFlLTRlZGYtYmU3Yy0wOTlkODAzM2VkY2UiLCJleHAiOjE1Njk3Mjc4OTF9.wweMzyB3tSQK34Jmez36MmC5xpUh15Ni3vOV_SGCzJ8

1.2 header

Jwt的头部承载两部分信息:

声明类型,这里是Jwt

声明加密的算法 通常直接使用 HMAC SHA256

Jwt里验证和签名使用的算法列表如下:

JWS 算法名称

HS256 HMAC256

HS384 HMAC384

HS512 HMAC512

RS256 RSA256

RS384 RSA384

RS512 RSA512

ES256 ECDSA256

ES384 ECDSA384

ES512 ECDSA512

1.3 playload

载荷就是存放有效信息的地方。基本上填2种类型数据

标准中注册的声明的数据;

自定义数据。

由这2部分内部做base64加密。

标准中注册的声明 (建议但不强制使用)

iss: jwt签发者

sub: jwt所面向的用户

aud: 接收jwt的一方

exp: jwt的过期时间,这个过期时间必须要大于签发时间

nbf: 定义在什么时间之前,该jwt都是不可用的.

iat: jwt的签发时间

jti: jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击。

自定义数据:存放我们想放在token中存放的key-value值

1.4 signature

Jwt的第三部分是一个签证信息,这个签证信息由三部分组成

base64加密后的header和base64加密后的payload连接组成的字符串,然后通过header中声明的加密方式进行加盐secret组合加密,然后就构成了Jwt的第三部分。

二、Spring Boot和Jwt集成示例

2.1、项目依赖 pom.xml

com.auth0

java-jwt

3.10.3

2.2、自定义注解//需要登录才能进行操作的注解LoginToken

@Target({ElementType.METHOD,ElementType.TYPE})

@Retention(RetentionPolicy.RUNTIME)

public@interfaceLoginToken{

booleanrequired()defaulttrue;

}

//用来跳过验证的PassToken

@Target({ElementType.METHOD,ElementType.TYPE})

@Retention(RetentionPolicy.RUNTIME)

public@interfacePassToken{

booleanrequired()defaulttrue;

}

2.3、用户实体类、及查询service

用户实体类

@Data

@AllArgsConstructor

@NoArgsConstructor

publicclassUser{

privateStringuserID;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值