Spring Boot 整合 JWT的方法

所属分类: 软件编程 / java 阅读数: 49
收藏 0 赞 0 分享

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)引入依赖

<!-- JWT相关 -->
<dependency>
 <groupId>io.jsonwebtoken</groupId>
 <artifactId>jjwt</artifactId>
 <version>0.7.0</version>
</dependency>

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);
  if (claims != null) {
   String 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的资料请关注脚本之家其它相关文章!

更多精彩内容其他人还在看

SpringBoot中使用Ehcache的详细教程

EhCache 是一个纯 Java 的进程内缓存框架,具有快速、精干等特点,是 Hibernate 中默认的 CacheProvider。这篇文章主要介绍了SpringBoot中使用Ehcache的相关知识,需要的朋友可以参考下
收藏 0 赞 0 分享

在idea 中添加和删除模块Module操作

这篇文章主要介绍了在idea 中添加和删除模块Module操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

java spring整合junit操作(有详细的分析过程)

这篇文章主要介绍了java spring整合junit操作(有详细的分析过程),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

详解JAVA 弱引用

这篇文章主要介绍了 JAVA 弱引用的相关资料,帮助大家更好的理解和学习java引用对象,感兴趣的朋友可以了解下
收藏 0 赞 0 分享

深入了解JAVA 虚引用

这篇文章主要介绍了JAVA 虚引用的相关资料,帮助大家更好的理解和学习JAVA,感兴趣的朋友可以了解下
收藏 0 赞 0 分享

详解JAVA 强引用

这篇文章主要介绍了JAVA 强引用的相关资料,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
收藏 0 赞 0 分享

java中的按位与(&)用法说明

这篇文章主要介绍了java中的按位与(&)用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

深入了解JAVA 软引用

这篇文章主要介绍了JAVA 软引用的相关资料,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
收藏 0 赞 0 分享

利用MyBatis实现条件查询的方法汇总

这篇文章主要给大家介绍了关于利用MyBatis实现条件查询的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者使用MyBatis具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
收藏 0 赞 0 分享

Intellij IDEA 与maven 版本不符 Unable to import maven project See logs for details: No implementation for org.apache.maven.model.path.PathTranslator was bound

这篇文章主要介绍了Intellij IDEA 与maven 版本不符 Unable to import maven project See logs for details: No implementation for org.apache.maven.model.path.Pa
收藏 0 赞 0 分享
查看更多