当前位置: 首页 > news >正文

基于JWT的用户token验证

1. 基于session的用户验证

2. 基于token的用户身份验证

3. jwt

jwt代码实现方式

1. 导包

<dependency><groupId>com.auth0</groupId><artifactId>java-jwt</artifactId><version>3.18.2</version>
</dependency>

2. 在登录用户接口返回token(当用户登录时返回token)

登录接口

@PostMapping("/user-tokens")
public JsonResponse<String> login(@RequestBody User user) throws Exception {String token = userService.login(user);return new JsonResponse<>(token);
}
public String login(User user) throws Exception {// 判断用户登录逻辑...//如果用户登录成功,返回token,token基于用户idString token = TokenUtil.generateToken(user.getId());return token;}
public class TokenUtil {private static final String ISSUER = "签发者";// 创建tokenpublic static String generateToken(Long userId) throws Exception {Algorithm algorithm = Algorithm.RSA256(RSAUtil.getPublicKey(),RSAUtil.getPrivateKey());Calendar calendar = Calendar.getInstance();calendar.setTime(new Date());calendar.add(Calendar.SECOND,30);return JWT.create().withKeyId(String.valueOf(userId)).withIssuer(ISSUER).withExpiresAt(calendar.getTime()).sign(algorithm);}}

上面的代码会通过用户id生成一个token,前端可以得到token,然后将token报错在浏览器内存里

然后前端只要发送请求,都会带着token

服务端通过token获取用户信息

@GetMapping()
public User getUserInfo(){Long userId = userSupport.getCurrentUserId();User user = userService.getUserInfo(userId);return user;
}

先通过传过来的heander,得到token

public Long getCurrentUserId(){ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();String token = requestAttributes.getRequest().getHeader("token");Long userId = TokenUtil.verifyToken(token);if(userId < 0){throw new ConditionException("非法用户");}return userId;
}

然后验证token,获得用户id

public class TokenUtil {private static final String ISSUER = "签发者";// 验证tokenpublic static Long verifyToken(String token){try {Algorithm algorithm = Algorithm.RSA256(RSAUtil.getPublicKey(), RSAUtil.getPrivateKey());JWTVerifier verifier = JWT.require(algorithm).build();DecodedJWT jwt = verifier.verify(token);String userId = jwt.getKeyId();return Long.valueOf(userId);}catch (TokenExpiredException e){throw new ConditionException("555","token过期!");}catch (Exception e){throw new ConditionException("非法token");}}
}

最后通过用户id获得用户信息

基本逻辑梳理

1. 用户先登录,登录是会判断是否为合法用户,如果是就返回一个token

2. 前端得到token,然后发送请求时会在header携带token

3. 后端从Header的到token,然后通过jwt解析token,成用户id

4. 通过用户Id可以查询时哪个用户

http://www.lryc.cn/news/270451.html

相关文章:

  • 通过 conda 安装 的 detectron2
  • 嵌入式开发——SPI OLED屏幕案例
  • ibm上电时序(视频内容)
  • 如何在Vue.js中使用$emit进行组件通信
  • SPSS相关统计学知识精要回顾-大家都来做做
  • React Native 从类组件到函数组件
  • Redis 快速搭建与使用
  • SpringBoot集成etcd,实现实时监听,实现配置中心
  • JavaScript元素根据父级元素宽高缩放
  • 易趋产品升级(EasyTrack 11_V1.3) | 集成飞书、WPS、个性化设置,增强团队协作和用户体验
  • 帆软FineBi V6版本经验总结
  • 03.MySQL的体系架构
  • 随笔笔记-2023
  • 2023.12.31 Python 词频统计
  • day12--java高级编程:网络通讯
  • MongoDB聚合:$out
  • 一次奇葩的spin_lock_irq / spin_unlock_irq使用不当导致的系统卡死分析
  • 公司创建百度百科需要哪些内容?
  • qt中信号槽第五个参数
  • 模式识别与机器学习-SVM(线性支持向量机)
  • 【并行计算】GPU,CUDA
  • 计算机网络教案——计算机网络设备章节
  • 什么是SLAM中的回环检测,如果没有回环检测会怎样
  • ubuntu 通过文件设置静态IP、DNS、网关
  • mapboxgl 中热力图的实现以及给热力图点增加鼠标移上 popup 效果
  • golang并发安全-sync.map
  • 开发第一个SpringBoot程序
  • 2023年度总结—你是你的年度MVP吗?
  • Linux基础知识学习3
  • Leetcode5-在长度2N的数组中找出重复N次的元素(961)