|
|
package com.service.impl;
|
|
|
|
|
|
import java.util.Calendar;
|
|
|
import java.util.Date;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import com.baomidou.mybatisplus.mapper.EntityWrapper;
|
|
|
import com.baomidou.mybatisplus.mapper.Wrapper;
|
|
|
import com.baomidou.mybatisplus.plugins.Page;
|
|
|
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
|
|
|
import com.dao.TokenDao;
|
|
|
import com.entity.TokenEntity;
|
|
|
import com.service.TokenService;
|
|
|
import com.utils.CommonUtil;
|
|
|
import com.utils.PageUtils;
|
|
|
import com.utils.Query;
|
|
|
|
|
|
/**
|
|
|
* 处理token相关业务逻辑的服务实现类
|
|
|
*/
|
|
|
@Service("tokenService")
|
|
|
// 继承ServiceImpl类,指定数据访问对象为TokenDao和实体类为TokenEntity,实现TokenService接口
|
|
|
public class TokenServiceImpl extends ServiceImpl<TokenDao, TokenEntity> implements TokenService {
|
|
|
|
|
|
// 根据传入的参数进行分页查询Token实体数据的方法
|
|
|
// @param params 包含查询条件、分页参数等信息的Map集合
|
|
|
// @return PageUtils对象,包含了分页查询结果的相关信息,如总记录数、当前页码等
|
|
|
@Override
|
|
|
public PageUtils queryPage(Map<String, Object> params) {
|
|
|
// 创建分页对象,使用Query工具类从参数中构建分页参数并获取Page对象
|
|
|
Page<TokenEntity> page = this.selectPage(
|
|
|
new Query<TokenEntity>(params).getPage(),
|
|
|
// 创建一个空的实体查询条件包装器,即查询所有符合条件的记录(这里未添加具体条件)
|
|
|
new EntityWrapper<TokenEntity>()
|
|
|
);
|
|
|
// 使用PageUtils工具类将MyBatis-Plus的Page对象转换为自定义的分页工具对象并返回
|
|
|
return new PageUtils(page);
|
|
|
}
|
|
|
|
|
|
// 根据传入的查询条件包装器查询Token实体视图列表的方法
|
|
|
// @param wrapper 用于构建查询条件的包装器,类型为TokenEntity的包装器
|
|
|
// @return 包含Token实体视图的List集合
|
|
|
@Override
|
|
|
public List<TokenEntity> selectListView(Wrapper<TokenEntity> wrapper) {
|
|
|
// 调用数据访问对象的selectListView方法,传入查询条件包装器,获取Token实体视图列表
|
|
|
return baseMapper.selectListView(wrapper);
|
|
|
}
|
|
|
|
|
|
// 根据传入的参数和查询条件进行分页查询Token实体数据的方法
|
|
|
// @param params 包含查询条件、分页参数等信息的Map集合
|
|
|
// @param wrapper 用于构建查询条件的包装器,类型为TokenEntity的包装器
|
|
|
// @return PageUtils对象,包含了分页查询结果的相关信息
|
|
|
@Override
|
|
|
public PageUtils queryPage(Map<String, Object> params,
|
|
|
Wrapper<TokenEntity> wrapper) {
|
|
|
// 创建分页对象,使用Query工具类从参数中构建分页参数并获取Page对象
|
|
|
Page<TokenEntity> page = new Query<TokenEntity>(params).getPage();
|
|
|
// 设置分页对象的记录,通过调用数据访问对象的selectListView方法,传入分页对象和查询条件包装器获取结果
|
|
|
page.setRecords(baseMapper.selectListView(page, wrapper));
|
|
|
// 使用PageUtils工具类将MyBatis-Plus的Page对象转换为自定义的分页工具对象并返回
|
|
|
PageUtils pageUtil = new PageUtils(page);
|
|
|
return pageUtil;
|
|
|
}
|
|
|
|
|
|
// 生成Token的方法,根据用户ID、用户名、表名和角色生成并处理Token相关信息
|
|
|
// @param userid 用户ID
|
|
|
// @param username 用户名
|
|
|
// @param tableName 表名
|
|
|
// @param role 角色
|
|
|
// @return 生成的Token字符串
|
|
|
@Override
|
|
|
public String generateToken(Long userid, String username, String tableName, String role) {
|
|
|
// 根据用户ID和角色查询Token实体,判断是否已存在对应的Token记录
|
|
|
TokenEntity tokenEntity = this.selectOne(new EntityWrapper<TokenEntity>().eq("userid", userid).eq("role", role));
|
|
|
// 生成32位的随机字符串作为Token
|
|
|
String token = CommonUtil.getRandomString(32);
|
|
|
// 获取当前时间的日历对象
|
|
|
Calendar cal = Calendar.getInstance();
|
|
|
// 设置日历的时间为当前时间
|
|
|
cal.setTime(new Date());
|
|
|
// 将时间增加1小时,设置Token的过期时间
|
|
|
cal.add(Calendar.HOUR_OF_DAY, 1);
|
|
|
// 如果Token实体已存在,则更新其Token和过期时间
|
|
|
if (tokenEntity != null) {
|
|
|
tokenEntity.setToken(token);
|
|
|
tokenEntity.setExpiratedtime(cal.getTime());
|
|
|
this.updateById(tokenEntity);
|
|
|
} else {
|
|
|
// 如果Token实体不存在,则插入一条新的Token记录
|
|
|
this.insert(new TokenEntity(userid, username, tableName, role, token, cal.getTime()));
|
|
|
}
|
|
|
// 返回生成的Token
|
|
|
return token;
|
|
|
}
|
|
|
|
|
|
// 根据Token获取Token实体的方法,并检查Token是否过期
|
|
|
// @param token Token字符串
|
|
|
// @return TokenEntity对象,如果Token无效或已过期则返回null
|
|
|
@Override
|
|
|
public TokenEntity getTokenEntity(String token) {
|
|
|
// 根据Token查询Token实体
|
|
|
TokenEntity tokenEntity = this.selectOne(new EntityWrapper<TokenEntity>().eq("token", token));
|
|
|
// 如果Token实体不存在或者Token已过期(过期时间早于当前时间),则返回null
|
|
|
if (tokenEntity == null || tokenEntity.getExpiratedtime().getTime() < new Date().getTime()) {
|
|
|
return null;
|
|
|
}
|
|
|
// 返回有效的Token实体
|
|
|
return tokenEntity;
|
|
|
}
|
|
|
} |