开发者学堂课程【微服务+全栈在线教育实战项目演练(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+什么
下面的注册和登录中,这几个方法都会用到。