Spring Boot 整合 JWT的方法

网友投稿 496 2023-05-19

Spring Boot 整合 JWT的方法

Spring Boot 整合 JWT的方法

1、JWT 是什么?

JWT 是一个开放标准,它定义了一种用于简洁,自包含的用于通信双方之间以 jsON 对象的形式安全传递信息的方法。JWT 可以使用 HMAC 算法或者是 RSA 的公钥密钥对进行签名。

简单来说,就是通过一定规范来生成 token,然后可以通过解密算法逆向解密 token,这样就可以获取用户信息。

优点:

1)生产的 token 可以包含基本信息,比如 id、用户昵称、头像等信息,避免再次查库

2)存储在客户端,不占用服务端的内存资源

缺点:

token 是经过 base64 编码,所以可以解码,因此 token 加密前的对象不应该包含敏感信息,如用户权限,密码等

2、JWT 格式组成:头部、负载、签名

header+payload+signature

头部:主要是描述签名算法

负载:主要描述是加密对象的信息,如用户的id等,也可以加些规范里面的东西,如 iss 签发者,exp 过期时间,sub 面向的用户

签名:主要是把前面两部分进行加密,防止别人拿到 token 进行 base 解密后篡改 token

3、关于jwt客户端存储

可以存储在 Cookie,localStorage 和 sessionStorage 里面

4、引入相关依赖并开发 JWT 工具类

1)引入依赖

io.jsonwebtoken

jjwt

0.7.0

2)开发生产 token 方法

3)开发检验 token 方法

package com.haitaiinc.clinicpathservice.utils;

import com.haitaiinc.clinicpathservice.entity.UserInfo;

import io.jsonwebtoken.Claims;

import io.jsonwebtoken.Jwts;

import io.jsonwebtoken.SignatureAlgorithm;

import org.springframework.util.StringUtils;

import java.util.Date;

public class JwtUtils {

public static final String SUBJECT = "admin";

/**

* 过期时间,毫秒,一周

*/

public static final long EXPIRE = 1000 * 60 * 60 * 24 * 7;

/**

* 秘钥

*/

public static final String APPSECRET = "haitaiinc";

/**

* 生成jwt

*

* @param userInfo

* @return

*/

public static String geneJsonWebToken(UserInfo userInfo) {

if (userInfo == null || StringUtils.isEmpty(userInfo.getUserId()) || StringUtils.isEmpty(userInfo.getUserName())) {

return null;

}

String token = Jwts.builder().setSubject(SUBJECT)

.claim("id", userInfo.getUserId())

.claim("name", userInfo.getUserName())

.setIssuedAt(new Date())

.setExpiration(new Date(System.currentTimeMillis() + EXPIRE))

.signWith(SignatureAlgorithm.HS256, APPSECRET).compact();

return token;

}

/**

* 校验token

*

* @param token

* @return

*/

public static Claims checkJWT(String token) {

try {

final Claims claims = Jwts.parser().setSigningKey(APPSECRET).

parseClaimsJws(token).getBody();

return claims;

} catch (Exception e) {

}

return null;

}

}

4)测试

package com.haitaiinc.clinicpathservice;

import com.haitaiinc.clinicpathservice.entity.UserInfo;

import com.haitaiinc.clinicpathservice.utils.JwtUtils;

import io.jsonwebtoken.Claims;

import org.junit.jupiter.api.Test;

public class CommonTest {

@Test

public void testGeneJwt() {

UserInfo user = new UserInfo();

user.setUserId("admin");

user.setUserName("管理员");

String token = JwtUtils.geneJsonWebToken(user);

System.out.println(token);

}

@Test

public void testCheck() {

String token = "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhZG1pbiIsImlkIjoiYWRtaW4iLCJuYW1lIjoi566h55CG5ZGYIiwiaWF0IjoxNTc3NTU3MDU1LCJleHAiOjE1NzgxNjE4NTV9.VrrKtCTnxVN76JhpyIusCGq9Wj89wLor0OqIJ6s0zXo";

Claims claims = JwtUtils.checkJWT(token);

ZbpnAdKB if (claims != null) {

StrZbpnAdKBing id = (String) claims.get("id");

String name = (String) claims.get("name");

System.out.println(id);

System.out.println(name);

} else {

System.out.println("非法token");

}

}

}

以上就是Spring Boot 整合 JWT的方法的详细内容,更多关于Spring Boot 整合 JWT的资料请关注我们其它相关文章!

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:实例讲解spring boot 多线程
下一篇:intellij idea如何将web项目打成war包的实现
相关文章

 发表评论

暂时没有评论,来抢沙发吧~