项目添加 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+什么

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


相关文章
|
8月前
|
存储 JSON JavaScript
前后端分离项目知识汇总(微信扫码登录,手机验证码登录,JWT)-1
前后端分离项目知识汇总(微信扫码登录,手机验证码登录,JWT)
210 0
|
5月前
|
JSON API 数据安全/隐私保护
Django 后端架构开发:JWT 项目实践与Drf版本控制
Django 后端架构开发:JWT 项目实践与Drf版本控制
99 0
|
5月前
|
存储 JSON 安全
在项目中到底应不应该用jwt?
JSON Web Tokens(JWT)是一种开放标准,用于在网络上传输安全信息。它常用于身份验证场景,用户登录后,服务器生成JWT并返回给客户端。客户端在后续请求中携带此令牌,服务器验证其有效性来确认用户身份。JWT具有无状态、可扩展和安全的特点,支持跨域认证,但也有令牌大小、续期复杂等缺点。是否使用JWT取决于项目需求,多数公司在采用,除非有特殊理由避免。以下是Go语言中使用JWT的一个示例。
91 0
|
JSON 前端开发 安全
前后端分离项目知识汇总(微信扫码登录,手机验证码登录,JWT)-2
前后端分离项目知识汇总(微信扫码登录,手机验证码登录,JWT)
106 0
|
8月前
|
JSON 前端开发 安全
前后端分离项目知识汇总(微信扫码登录,手机验证码登录,JWT)-2
前后端分离项目知识汇总(微信扫码登录,手机验证码登录,JWT)
126 0
|
JSON 数据格式
jwt->jwt简介,jwt工具类,jwt集进成spa项目
jwt->jwt简介,jwt工具类,jwt集进成spa项目
86 0
|
存储 JSON JavaScript
前后端分离项目知识汇总(微信扫码登录,手机验证码登录,JWT)-1
前后端分离项目知识汇总(微信扫码登录,手机验证码登录,JWT)
116 0
|
JSON JavaScript 算法
[Vue]之Jwt的入门和Jwt工具类的使用及Jwt集成spa项目
[Vue]之Jwt的入门和Jwt工具类的使用及Jwt集成spa项目
180 0
|
算法 Java 数据安全/隐私保护
微服务轮子项目(20) -JWT的RSA非对称密钥生成
微服务轮子项目(20) -JWT的RSA非对称密钥生成
60 0
|
1月前
|
JSON 安全 Java
什么是JWT?如何使用Spring Boot Security实现它?
什么是JWT?如何使用Spring Boot Security实现它?
160 5

热门文章

最新文章