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

西安公司做网站台州网站设计开发

西安公司做网站,台州网站设计开发,天猫旗舰店网站建设案例,直播开放平台抖音双Token实现用户登录身份认证-Java版 1. 设计方案 方案概述: Access Token: 短期有效的JWT,包含用户ID、设备ID、token版本号。Refresh Token: 长期有效的令牌,存储于Redis,关联用户信息、设备ID及token版本号,用于刷新Access Token。设备绑定: Token与设备ID绑定,防止跨…

双Token实现用户登录身份认证-Java版

1. 设计方案

方案概述:

  • Access Token: 短期有效的JWT,包含用户ID设备IDtoken版本号
  • Refresh Token: 长期有效的令牌,存储于Redis,关联用户信息、设备IDtoken版本号,用于刷新Access Token
  • 设备绑定: Token设备ID绑定,防止跨设备使用。
  • 安全性: 用户修改关键信息时递增token版本号,使旧Token失效。

整个流程大致如下:

  1. 用户登录,提供手机号密码设备ID
  2. 服务端验证通过后,生成access token(包含userIddeviceIdtokenVersion)和refresh token
  3. refresh token存储到Redis,key为refresh_token: + refreshToken,值为userIddeviceIdtokenVersion
  4. 客户端保存双token,并在请求时携带access token设备ID
  5. 拦截器验证access token的有效性,包括签名、过期时间、设备ID匹配、tokenVersion是否最新。
  6. access token过期后,客户端使用refresh token设备ID请求刷新。
  7. 服务端验证refresh token是否存在,设备ID是否匹配,tokenVersion是否一致,若通过则生成新的access token,Redis中的refresh token不变。
  8. 用户修改信息时,更新tokenVersion,使所有旧的refresh tokenaccess token失效。
  9. 不同设备的登录生成不同的refresh token,设备间无法混用,,同时减少token泄露带来的后续风险。
  10. 用户退出时,删除Redis中对应得refresh token

针对各个模块的代码实现:

  • JWT工具类:处理生成和解析token,包含tokenVersion
  • 登录接口:生成双token,存储refresh token到Redis。
  • 刷新接口:处理refresh token,生成新的access token
  • 拦截器:验证access token设备信息。
  • 用户修改信息:更新tokenVersion

2. 代码实现

2.1 数据库用户信息表结构

在这里插入图片描述

2.2 JWT工具类

@Getter
@Component
public class AuthJwtUtil {@Value("${auth.jwt.secretKey}")private String secretKey;@Value("${auth.jwt.access.expiration}")private long accessExpirationMs;@Value("${auth.jwt.refresh.expiration}")private long refreshExpirationMs;@Autowiredprivate RedisTemplate<String, Object> redisTemplate;/*** 生成访问令牌accessToken* @param userId* @param deviceId* @param tokenVersion* @return*/public String generateAccessToken(Long userId, String deviceId, Integer tokenVersion) {return Jwts.builder().claim("userId", userId).claim("deviceId", deviceId).claim("tokenVersion", tokenVersion).setIssuedAt(new Date()).setExpiration(new Date(System.currentTimeMillis() + accessExpirationMs)).signWith(SignatureAlgorithm.HS256, secretKey.getBytes(StandardCharsets.UTF_8)).compact();}/*** 解析访问令牌* @param token* @return*/public Claims parseAccessToken(String token) {return Jwts.parser().setSigningKey(secretKey.getBytes(StandardCharsets.UTF_8)).parseClaimsJws(token).getBody();}/*** 生成刷新令牌refreshToken* @param userId* @param deviceId* @param tokenVersion* @return*/public String generateRefreshToken(Long userId, String deviceId, Integer tokenVersion) {String refreshToken = UUID.randomUUID().toString();AuthRefreshTokenInfo refreshTokenInfo = AuthRefreshTokenInfo.builder().userId(userId).deviceId(deviceId).tokenVersion(tokenVersion).build();String refreshKey = "refresh_token:" + refreshToken;redisTemplate.opsForValue().set(refreshKey, refreshTokenInfo, Duration.ofMillis(refreshExpirationMs));return refreshToken;}
}

2.3 请求拦截器

@Component
public class AuthInterceptor implements HandlerInterceptor {@Autowiredprivate AuthJwtUtil jwtUtil;@Autowiredprivate AuthService authService;@Overridepublic boolean preHandle(

文章转载自:

http://rXWDbj6s.rnnts.cn
http://o7gQCInD.rnnts.cn
http://VVHriVhk.rnnts.cn
http://Myxs5OZi.rnnts.cn
http://W18VvvQT.rnnts.cn
http://g2rTvsWH.rnnts.cn
http://F32P2sVb.rnnts.cn
http://WxUqURco.rnnts.cn
http://4mQIeqTy.rnnts.cn
http://Cj2hVU7x.rnnts.cn
http://fiFpxY2p.rnnts.cn
http://CgJOHaYj.rnnts.cn
http://nOv1RJEo.rnnts.cn
http://Am9w9YZF.rnnts.cn
http://BwbRZW02.rnnts.cn
http://KZPURsYO.rnnts.cn
http://e0xYb91o.rnnts.cn
http://HPKRWY5S.rnnts.cn
http://iaZhwATL.rnnts.cn
http://9Io3iotG.rnnts.cn
http://Wl5bEJwH.rnnts.cn
http://0Hufb0K3.rnnts.cn
http://l3xx85Qz.rnnts.cn
http://jfYZXeOg.rnnts.cn
http://VSJ56Gf5.rnnts.cn
http://CcseqPCG.rnnts.cn
http://aIOnyVNd.rnnts.cn
http://DArEwmJG.rnnts.cn
http://lRduWU4r.rnnts.cn
http://nh2KxOFy.rnnts.cn
http://www.dtcms.com/wzjs/659341.html

相关文章:

  • 江苏省公路与水路建设网站html网页制作案例
  • 小企业做网站有没有用大学生网站建设策划书范文
  • 手机网站设计企业有什么好的网站建设的书
  • 织梦网站后台地址产品免费推广网站有哪些
  • 如何查看一个网站流量推荐几个适合晚上看的2021
  • 大连网站建设选高和科技如何形容网站开发公司技术经验
  • 龙湖网站建设做设计需要知道的几个网站
  • 网站建设模块有哪些阜阳集团网站建设
  • 音乐网站建立知识库管理系统解决方案
  • 杭州做企业网站的公司石家庄网站开发多少钱
  • 快速的网站开发建e网设计案例
  • 南宁网站搜索引擎优化信息型网站有哪些
  • 饿了吗网站建设思路wordpress如何导出主题
  • 网站视频弹窗代码网站维护属于什么专业
  • 网站开发代码语言wordpress 主题 瓷砖
  • 怎样在百度做网站打广告宁波方正建设监理网站
  • 成都市建设工程施工安监站网站docker wordpress安装目录
  • 广东省建设工程执业中心网站wordpress 设置footer
  • wordpress有名的网站织梦cms下载
  • 个体户能否从事网站建设网站开发工程师工资
  • 我想自己建立一个网站建筑公司logo
  • 北镇网站建设产品开发管理
  • Wordpress不能修改导航名称网站seo分析工具
  • dede页码的调用 网站百度怎么发布自己的信息
  • 软件系统网站建设网站建设在哪里的
  • 做企业网站域名需要解析吗2022拉新推广平台
  • 外贸营销网站建设公司绵阳的网站建设
  • 如何申请域名建网站网站建设 管理
  • 怎么把网站做成手机版的网页美工设计公司
  • 网站内的搜索怎么做网站运营外包公司