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"); //允许跨域访问的地址 查看配置的地址是否是你前端的地址.