From beac827c04e5365eb9dcc7a51c6055238be88e98 Mon Sep 17 00:00:00 2001 From: p2x9nfpei <2196435763@qq.com> Date: Mon, 28 Apr 2025 21:34:11 +0800 Subject: [PATCH] ADD file via upload --- TokenServiceImpl.java | 121 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 TokenServiceImpl.java diff --git a/TokenServiceImpl.java b/TokenServiceImpl.java new file mode 100644 index 0000000..e40eb52 --- /dev/null +++ b/TokenServiceImpl.java @@ -0,0 +1,121 @@ +// 声明该类所在的包为 com.service.impl +package com.service.impl; + +// 导入 Java 中的 Calendar 类,用于处理日期和时间 +import java.util.Calendar; +// 导入 Java 中的 Date 类,用于表示日期和时间 +import java.util.Date; +// 导入 Java 中的 List 接口,用于存储一组对象 +import java.util.List; +// 导入 Java 中的 Map 接口,用于存储键值对 +import java.util.Map; + +// 导入 Spring 框架的 Service 注解,用于将该类标记为服务层组件 +import org.springframework.stereotype.Service; + +// 导入 MyBatis-Plus 的 EntityWrapper 类,用于构建 SQL 查询条件 +import com.baomidou.mybatisplus.mapper.EntityWrapper; +// 导入 MyBatis-Plus 的 Wrapper 接口,是 EntityWrapper 的父接口 +import com.baomidou.mybatisplus.mapper.Wrapper; +// 导入 MyBatis-Plus 的 Page 类,用于分页查询 +import com.baomidou.mybatisplus.plugins.Page; +// 导入 MyBatis-Plus 的 ServiceImpl 类,作为服务实现类的基类 +import com.baomidou.mybatisplus.service.impl.ServiceImpl; +// 导入 Token 数据访问对象接口 +import com.dao.TokenDao; +// 导入 Token 实体类 +import com.entity.TokenEntity; +// 重复导入 Token 实体类,此处可删除该重复导入 +import com.entity.TokenEntity; +// 导入 Token 服务接口 +import com.service.TokenService; +// 导入自定义的通用工具类 +import com.utils.CommonUtil; +// 导入自定义的分页工具类 +import com.utils.PageUtils; +// 导入自定义的查询工具类 +import com.utils.Query; + +// 使用 Service 注解将该类标记为 Spring 服务组件,名称为 tokenService +@Service("tokenService") +// 定义 Token 服务实现类,继承自 MyBatis-Plus 的 ServiceImpl 类,并实现 TokenService 接口 +public class TokenServiceImpl extends ServiceImpl implements TokenService { + + // 重写 TokenService 接口中的 queryPage 方法,用于分页查询 Token 数据 + @Override + public PageUtils queryPage(Map params) { + // 根据传入的参数创建一个 TokenEntity 类型的分页对象 + Page page = this.selectPage( + // 通过 Query 工具类根据参数获取分页信息 + new Query(params).getPage(), + // 创建一个空的查询条件包装器 + new EntityWrapper() + ); + // 根据分页对象创建 PageUtils 对象并返回 + return new PageUtils(page); + } + + // 重写 TokenService 接口中的 selectListView 方法,用于查询 Token 列表数据 + @Override + public List selectListView(Wrapper wrapper) { + // 调用数据访问对象的 selectListView 方法,根据查询条件包装器查询列表数据并返回 + return baseMapper.selectListView(wrapper); + } + + // 重写 TokenService 接口中的 queryPage 方法,支持带查询条件的分页查询 Token 数据 + @Override + public PageUtils queryPage(Map params, + Wrapper wrapper) { + // 根据传入的参数创建一个 TokenEntity 类型的分页对象 + Page page = new Query(params).getPage(); + // 调用数据访问对象的 selectListView 方法,根据分页对象和查询条件包装器查询列表数据并设置到分页对象中 + page.setRecords(baseMapper.selectListView(page, wrapper)); + // 根据分页对象创建 PageUtils 对象 + PageUtils pageUtil = new PageUtils(page); + // 返回 PageUtils 对象 + return pageUtil; + } + + // 重写 TokenService 接口中的 generateToken 方法,用于生成 Token + @Override + public String generateToken(Integer userid, String username, String tableName, String role) { + // 根据用户 ID 和角色查询 Token 实体对象 + TokenEntity tokenEntity = this.selectOne(new EntityWrapper().eq("userid", userid).eq("role", role)); + // 调用通用工具类的方法生成一个 32 位的随机字符串作为 Token + String token = CommonUtil.getRandomString(32); + // 获取当前时间的 Calendar 实例 + Calendar cal = Calendar.getInstance(); + // 设置 Calendar 的时间为当前日期和时间 + cal.setTime(new Date()); + // 将 Calendar 的时间增加 1 小时,作为 Token 的过期时间 + cal.add(Calendar.HOUR_OF_DAY, 1); + // 如果查询到了 Token 实体对象 + if (tokenEntity != null) { + // 更新 Token 实体对象的 Token 字段 + tokenEntity.setToken(token); + // 更新 Token 实体对象的过期时间字段 + tokenEntity.setExpiratedtime(cal.getTime()); + // 调用更新方法更新 Token 实体对象 + this.updateById(tokenEntity); + } else { + // 如果未查询到 Token 实体对象,创建一个新的 Token 实体对象并插入数据库 + this.insert(new TokenEntity(userid, username, tableName, role, token, cal.getTime())); + } + // 返回生成的 Token + return token; + } + + // 重写 TokenService 接口中的 getTokenEntity 方法,用于根据 Token 获取 Token 实体对象 + @Override + public TokenEntity getTokenEntity(String token) { + // 根据 Token 查询 Token 实体对象 + TokenEntity tokenEntity = this.selectOne(new EntityWrapper().eq("token", token)); + // 如果未查询到 Token 实体对象或者 Token 已过期 + if (tokenEntity == null || tokenEntity.getExpiratedtime().getTime() < new Date().getTime()) { + // 返回 null + return null; + } + // 返回查询到的 Token 实体对象 + return tokenEntity; + } +} \ No newline at end of file