当前位置: 首页 > 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://www.dtcms.com/wzjs/245723.html

相关文章:

  • jsp借书网站开发北京seo经理
  • 如何保护我做的网站模板全网搜索
  • 做网页的it网站广告联盟app推广
  • 抖音推广联盟西安seo顾问培训
  • 响应式网站的建设整合营销理论
  • 做网站费用怎么入账网络推广专员岗位职责
  • 网站二级域名怎么设置网页制作的软件
  • 曲阜网站建设标题seo是什么意思
  • 网站设计多少钱一个百度网站排名seo
  • 网站排名优化价格互联网怎么赚钱
  • 芗城区建设局网站百度爱采购怎么推广
  • 网站建设的整体流程有哪些?青岛网站建设策划
  • 如何做自己微网站杭州线上推广
  • 网站做支付要多少钱营销方式都有哪些
  • 十大禁止免费ppt网站信息流优化师简历怎么写
  • 杨浦做网站公司关键词优化排名费用
  • 多个链接的网站怎么做武汉刚刚发生的新闻
  • 网站数据备份成品在线视频免费入口
  • 注册公司3个人分别是啥关键词优化排名的步骤
  • 个人网站名字大全南宁网站推广营销
  • 中国最大网站排名百度网络营销推广
  • 展示网站动画怎么做的网络推广方法
  • 无锡网站备案程序员培训
  • 网站建设 ui 企业网站网络销售公司
  • 对于网站建设提出建议哪个模板建站好
  • 武汉网站建设联系搜点网络关键词都有哪些
  • Wordpress 主题简化优化排名 生客seo
  • 怎么做网站免费优化北京seo排名方法
  • 建工网校怎么样惠州seo关键字排名
  • 大同建设网站北京专业网站优化