项目添加 JWT 工具类 | 学习笔记

简介: 快速学习 项目添加 JWT 工具类

开发者学堂课程【微服务+全栈在线教育实战项目演练(SpringCloud Alibaba+SpringBoot)项目添加 JWT 工具类】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/667/detail/11442


项目添加 JWT 工具类


内容介绍

一.在 common 引入依赖,复制 JWT 工具类

二.工具类中的四个方法


一.在 common 引入依赖,复制 JWT 工具类

<dependencies>

<!--JWT-->

<dependency>

<groupId>io.jsonwebtoken</groupId>

<artifactId>jjwt</artifactId>

</dependency>

</dependencies>

放到 common 里的 common_util 中

在今天的已经共享源码中复制工具类 JWTutils,复制到 common_util 里面

com.atguigu.commonutils 下有统一结果返回类 R.java,把 JWTutils 复制到这个文件夹下。

复制之后,下面来查看 JWTutils 里面的内容,要求看得懂代码。

在这个类中,写了很多静态方法,每个方法对应不同功能。

第一部分:在里面定义了两个常量

public class JwtUtils {

//常量

public static final long EXPIRE= 1000 * 60 * 60 * 24;//token过期时间,可改  

public static final String APP_SECRET="ukc8BDbRigUDaY6pZFfWus2jZWLPHO";//秘钥

什么是秘钥?

签名哈希中提到的 HMACSHA256(base64UrlEncode(header)+"."+base64UrlEncode(claims),secret)是本身的编码加密方式,根据其中的“secret”进行加密。

根据它做字符的加密和编码。第一部分中的秘钥是随便生成的字符串,在实际的公司中,秘钥是由公司的规则生成的。


二.工具类中的四个方法

1.生成 token 字符串的方法

public static String getJwtToken(String id, String nickname){

//传了两个值:一个是用户 id,一个是用户昵称。可以传多个值,此处传两个为例。

String JwtToken = Jwts.builder()//构建JWT字符串

setHeaderParam(s:"typ”,O :"JWT”)

setHeaderParam(s:"alg”,O:"HS256”)//设置 JWT 的头信息,是固定的,不需要改。

setSubject(“guli-user”)//分类,可改

setIssuedAt(new Date())

setExpiration(new Date(System.currentTimeMillis()+EXPIRE)//设置 token 字符串的过期时间

claim(s: "id",id)//设置 token 主体部分,存储用户信息

claim(s:"nickname", nickname)

signWith(SignatureAlgorithm.HS256, APP_SECRET) //签名哈希

compact();

最终

return JwtToken

2.判断 token 是否存在与有效

@param jwtToken  

@return

public static boolean checkToken(String jwtToken){

if(StringUtils.isEmpty(jwtToken))return false;//如果这个值等于空,直接 return false

try{

Jwts.parser().setSigningKey(APP_SECRET).parseClaimsJws(jwtTo ken);}catch(Exception e){

//如果不等于空,根据秘钥来验证 token 是否有效。用 jwts.Parser 解析来判断.。

如果这个值有异常,就 return false,有效则 return ture。

e.printStackTrace();

return farse

}

return true:

3.判断 token 是否存在与有效

@param request

@return

public static boolean checkToken(HttpServletRequest request) {//后面为了操作方便要把 token 值放到 header 里面。通过 request 在 header 里面把字符串得到,再做个验证看是不是有效的 token。

try{

String jwtToken = request. getHeader(S"token");

if(StringUtils. isEmpty(jwtToken)) return false;

Jwts.parser().setSigningKey(APP_SECRET).parseClaimsJws(jwtToken);

catch(Exception e){

e.printStackTrace();

return false;

return true,

这个方法和上一个一样,只是传的参数不同。

4.根据 token 字符串获取全员 id  

@param request

@return

public static String getMemberIdByJwtToken(HttpServletRequest request){

String jwtToken = request. getHeader(s;”token”); //通过 request 得到 token 字符串

if(StringUtils.isEmpty(jwtToken)) return "";

Jws<Claims>claimsJws = jwts.parser().setSigningKey(APP_SECRED).parseClaimsJws(jwtToken);//用 Jwt 解析得到 JWS<claims>

Claims claims = claimsJws. getBody();//通过 getBody()得到字符串中主体部分,在主体里取值

return (String)claims.get("id");//取什么值就些写 get+什么

下面的注册和登录中,这几个方法都会用到。


相关文章
|
6天前
|
存储 JSON JavaScript
前后端分离项目知识汇总(微信扫码登录,手机验证码登录,JWT)-1
前后端分离项目知识汇总(微信扫码登录,手机验证码登录,JWT)
73 0
|
6月前
|
XML JSON 前端开发
jwt的使用概念工具类与切入spa项目
jwt的使用概念工具类与切入spa项目
55 0
|
6月前
|
JSON 前端开发 安全
前后端分离项目知识汇总(微信扫码登录,手机验证码登录,JWT)-2
前后端分离项目知识汇总(微信扫码登录,手机验证码登录,JWT)
44 0
|
6天前
|
JSON 前端开发 安全
前后端分离项目知识汇总(微信扫码登录,手机验证码登录,JWT)-2
前后端分离项目知识汇总(微信扫码登录,手机验证码登录,JWT)
61 0
|
5月前
|
JSON 数据格式
jwt->jwt简介,jwt工具类,jwt集进成spa项目
jwt->jwt简介,jwt工具类,jwt集进成spa项目
46 0
|
6月前
|
存储 JSON JavaScript
前后端分离项目知识汇总(微信扫码登录,手机验证码登录,JWT)-1
前后端分离项目知识汇总(微信扫码登录,手机验证码登录,JWT)
69 0
|
6月前
|
JSON JavaScript 算法
[Vue]之Jwt的入门和Jwt工具类的使用及Jwt集成spa项目
[Vue]之Jwt的入门和Jwt工具类的使用及Jwt集成spa项目
98 0
|
6月前
|
算法 Java 数据安全/隐私保护
微服务轮子项目(20) -JWT的RSA非对称密钥生成
微服务轮子项目(20) -JWT的RSA非对称密钥生成
36 0
|
7月前
|
存储 JSON 数据安全/隐私保护
jwt的简介以及jwt工具类的介绍
jwt的简介以及jwt工具类的介绍
|
6天前
|
安全 数据安全/隐私保护
Springboot+Spring security +jwt认证+动态授权
Springboot+Spring security +jwt认证+动态授权