JWT解析为空

1.修改依赖

添加新JWT依赖并注释掉原来的(pom.xml文件130行)

<dependency>

<groupId>io.jsonwebtoken</groupId>

<artifactId>jjwt</artifactId>

<version>0.9.1</version>

</dependency>

<dependency>

<groupId>com.alibaba.fastjson2</groupId>

<artifactId>fastjson2</artifactId>

<version>2.0.7</version>

</dependency>

2.替换掉JwtUtils文件代码

 

package com.webgrd.common.utils; import com.alibaba.fastjson2.JSON; import io.jsonwebtoken.Claims; import io.jsonwebtoken.JwtBuilder; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; import org.springframework.stereotype.Component; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; import java.util.*; @Component //@Component 和 @Bean //https://blog.csdn.net/m0_51358164/article/details/126120731 public class JwtUtils { //有效期 private static final int JWT_EXPIRE = 300*60*1000;//半小时(测试时长 300分钟 ) //令牌秘钥 private static final String JWT_KEY = "123456"; public String createToken(Object data) { //当前时间 long currentTime = System.currentTimeMillis(); //过期时间 long expTime = currentTime + JWT_EXPIRE ; JwtBuilder builder = Jwts.builder() .setId(UUID.randomUUID()+"") .setSubject(JSON.toJSONString(data)) .setIssuer("system") .setIssuedAt(new Date(currentTime)) .signWith(SignatureAlgorithm.HS256,encodeSecret(JWT_KEY)) .setExpiration(new Date(expTime)); return builder.compact(); } private SecretKey encodeSecret(String key){ byte [] encode = Base64.getEncoder().encode(key.getBytes()); SecretKey secretKey = new SecretKeySpec(encode,0,encode.length,"AES"); return secretKey; } public Claims parseToken(String token){ Claims body = Jwts.parser() .setSigningKey(encodeSecret(JWT_KEY)) .parseClaimsJws(token) .getBody(); return body ; } //解析jwt需要验证null public <T> T parseToken(String token, Class<T> clazz){ Claims body = Jwts.parser() .setSigningKey(encodeSecret(JWT_KEY)) .parseClaimsJws(token) .getBody(); // System.out.println("body:"+body); return JSON.parseObject(body.getSubject(),clazz) ; } }

3.UserServiceImpl文件

从第85行开始:注意修改成下面代码

 

User loginUser = null; try { loginUser = jwtUtils.parseToken(token, User.class); } catch (Exception e) { throw new RuntimeException(e); } // } catch (IllegalAccessException e) { // throw new RuntimeException(e); // }

4.数据库没有创建

yml中配置的数据库没有创建,报以下错误:

 

解决方法:创建数据库,并导入数据表和数据.

5.跨域问题

现象:在页面右键->检查->console 看到下面截图报错

解决方法:MyConfig 第15行配置允许跨域访问.

configuration.addAllowedOrigin("http://localhost:8081"); //允许跨域访问的地址 查看配置的地址是否是你前端的地址.

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
JWT解析token的过程可以通过使用Java JWT库来实现。在给定的代码示例中,可以看到JwtInterceptor类实现了HandlerInterceptor接口,并在preHandle方法中进行了token的解析和验证。具体的解析过程如下: 1. 从HTTP请求头中获取token:通过request.getHeader("token")方法获取token的值。 2. 判断是否映射到方法:通过判断handler是否为HandlerMethod的实例来确定是否映射到方法。如果不是映射到方法,则直接通过。 3. 验证token是否为:通过StringUtils.isBlank(token)方法判断token是否为。如果为,则抛出异常"无token,请重新登录"。 4. 验证token的有效性:通过调用Token.verifyToken(token)方法验证token的有效性。如果验证失败,则抛出异常"token无效"。 5. 验证token的签名:在JWT中,token的签名用于验证token的完整性和真实性。具体的签名验证过程在给定的代码示例中没有展示,但可以通过使用Java JWT库中的方法来实现。 综上所述,JWT解析token的过程包括获取token、判断是否映射到方法、验证token是否为、验证token的有效性和验证token的签名。通过这些步骤,可以确保token的合法性和完整性。 #### 引用[.reference_title] - *1* *2* [jwt生成token与解析token](https://blog.csdn.net/qq_43840143/article/details/127719739)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [JWT生成Token及解析Token](https://blog.csdn.net/weixin_43759352/article/details/113873280)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值