前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >校友邦签到打卡协议(简略版)

校友邦签到打卡协议(简略版)

原创
作者头像
程序开发运营小维
修改2025-02-16 13:46:15
修改2025-02-16 13:46:15
11010
代码可运行
举报
文章被收录于专栏:SH云界途SH云界途
运行总次数:0
代码可运行

😍这段代码是一个方法实现,用于通过校友邦的登录接口进行登录,并结合 Redis 缓存来优化请求中敏感信息(加密值)的获取。以下是具体分析:


1. 方法签名

代码语言:javascript
代码运行次数:0
复制
public JSONObject xiaoYouBangLogin(InitClockInfo clockInInfo)
  • 方法功能:实现校友邦的登录操作。
  • 参数InitClockInfo clockInInfo,包含用户的初始化登录信息,例如手机号(通过 getPhone() 获取)。
  • 返回值:登录结果的 JSON 对象。

2. 设置线程上下文信息

代码语言:javascript
代码运行次数:0
复制
accountHolder.set(clockInInfo.getPhone());
type.set("getInfo");
  • 作用
    • 使用 ThreadLocal 变量 accountHoldertype 来存储线程上下文信息。
    • accountHolder.set(clockInInfo.getPhone())
      • 将当前线程的用户手机号存储,可能用于后续逻辑中识别用户。
    • type.set("getInfo")
      • 表示当前正在执行的任务类型为 "getInfo",可能用于分类日志记录或逻辑分支。

3. 登录接口地址

代码语言:javascript
代码运行次数:0
复制
String loginUrl = "https://xcx.xybsyw.com/login/login.action";
  • 作用:设置校友邦的登录接口 API 地址,后续会向该地址发送请求。

4. 从 Redis 获取加密信息

代码语言:javascript
代码运行次数:0
复制
String ency = (String) this.redisTemplate.opsForValue().get("encryptionValue:" + clockInInfo.getPhone());
JSONObject encryptionValue = null;
  • 作用
    • 尝试从 Redis 缓存中获取加密值(encryptionValue),缓存的 key 格式为:encryptionValue:<手机号>
    • 如果缓存中存在该值,则避免重复调用复杂的加密逻辑。

5. 判断是否命中缓存

代码语言:javascript
代码运行次数:0
复制
if (ency != null) {
  encryptionValue = JSONUtil.parseObj(ency);
}
  • 逻辑
    • 如果 Redis 中存在加密信息 ency,则将其解析为 JSONObject
    • JSONUtil.parseObj(ency)
      • 将 Redis 中存储的 JSON 字符串(ency)转换为 JSON 对象,便于后续使用。

6. 当缓存未命中时,调用方法生成加密信息

代码语言:javascript
代码运行次数:0
复制
else {
  encryptionValue = selectEncryptionValue();
}
  • 逻辑
    • 如果 Redis 缓存中不存在加密信息,则调用 selectEncryptionValue() 方法动态生成加密值。
    • selectEncryptionValue()
      • 假设是一个内部私有方法,用于根据某些逻辑生成登录所需的加密信息。具体实现不在本代码中,但可能涉及加密算法或向第三方接口请求加密值。

7. 将生成的加密信息存入 Redis 缓存

代码语言:javascript
代码运行次数:0
复制
if (encryptionValue != null)
  this.redisTemplate.opsForValue().set(
      "encryptionValue:" + clockInInfo.getPhone(),
      JSONUtil.toJsonStr((JSON) encryptionValue), 
      5L, 
      TimeUnit.SECONDS
  );
  • 逻辑
    • 如果动态生成了加密值(非空),则将其存储到 Redis 中,方便后续请求复用。
  • Redis 缓存机制
    • key"encryptionValue:" + clockInInfo.getPhone()
    • value:将 encryptionValue 转换为 JSON 字符串存储。
    • 过期时间:5 秒(TimeUnit.SECONDS)。
    • 目的
      • 减少重复调用生成加密值的方法。
      • 应用场景可能是生成的加密值在短时间内有效,设置 5 秒过期时间确保缓存实时性。

以上代码只作为一个参考~需要成品就留言私信我叭

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 😍这段代码是一个方法实现,用于通过校友邦的登录接口进行登录,并结合 Redis 缓存来优化请求中敏感信息(加密值)的获取。以下是具体分析:
  • 1. 方法签名
  • 2. 设置线程上下文信息
  • 3. 登录接口地址
  • 4. 从 Redis 获取加密信息
  • 5. 判断是否命中缓存
  • 6. 当缓存未命中时,调用方法生成加密信息
  • 7. 将生成的加密信息存入 Redis 缓存
  • 以上代码只作为一个参考~需要成品就留言私信我叭
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档