refactor: 重构util目录

This commit is contained in:
bunny 2025-03-25 21:32:31 +08:00
parent f299cb811b
commit b80208446e
25 changed files with 85 additions and 105 deletions

View File

@ -4,7 +4,6 @@ import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
@ -128,10 +127,6 @@ public class RedisConfiguration {
// 设置ObjectMapper访问权限
mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
// 记录序列化之后的数据类型方便反序列化
mapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL);
// mapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.EVERYTHING);
// 关闭默认的日期格式化方式默认UTC日期格式 yyyy-MM-ddTHH:mm:ss.SSS
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
mapper.registerModule(timeModule);

View File

@ -9,7 +9,7 @@ import cn.bunny.services.context.BaseContext;
import cn.bunny.services.mapper.system.PowerMapper;
import cn.bunny.services.mapper.system.RoleMapper;
import cn.bunny.services.utils.JwtHelper;
import cn.bunny.services.utils.RoleUtil;
import cn.bunny.services.utils.system.RoleUtil;
import com.alibaba.fastjson2.JSON;
import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;

View File

@ -13,7 +13,7 @@ import cn.bunny.services.context.BaseContext;
import cn.bunny.services.exception.AuthCustomerException;
import cn.bunny.services.mapper.message.MessageReceivedMapper;
import cn.bunny.services.service.message.MessageReceivedService;
import cn.bunny.services.utils.UserUtil;
import cn.bunny.services.utils.system.UserUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

View File

@ -19,7 +19,7 @@ import cn.bunny.services.mapper.message.MessageReceivedMapper;
import cn.bunny.services.mapper.system.UserMapper;
import cn.bunny.services.service.message.MessageReceivedService;
import cn.bunny.services.service.message.MessageService;
import cn.bunny.services.utils.UserUtil;
import cn.bunny.services.utils.system.UserUtil;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;

View File

@ -14,9 +14,9 @@ import cn.bunny.services.context.BaseContext;
import cn.bunny.services.exception.AuthCustomerException;
import cn.bunny.services.mapper.system.FilesMapper;
import cn.bunny.services.service.system.FilesService;
import cn.bunny.services.utils.FileUtil;
import cn.bunny.services.utils.minio.MinioProperties;
import cn.bunny.services.utils.minio.MinioUtil;
import cn.bunny.services.utils.system.FileUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

View File

@ -8,7 +8,7 @@ import cn.bunny.services.mapper.system.RolePowerMapper;
import cn.bunny.services.mapper.system.UserMapper;
import cn.bunny.services.mapper.system.UserRoleMapper;
import cn.bunny.services.service.system.RolePowerService;
import cn.bunny.services.utils.RoleUtil;
import cn.bunny.services.utils.system.RoleUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;

View File

@ -14,7 +14,7 @@ import cn.bunny.services.mapper.system.RolePowerMapper;
import cn.bunny.services.mapper.system.RouterRoleMapper;
import cn.bunny.services.mapper.system.UserRoleMapper;
import cn.bunny.services.service.system.RoleService;
import cn.bunny.services.utils.RoleUtil;
import cn.bunny.services.utils.system.RoleUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

View File

@ -20,8 +20,8 @@ import cn.bunny.services.mapper.system.RolePowerMapper;
import cn.bunny.services.mapper.system.RouterMapper;
import cn.bunny.services.mapper.system.RouterRoleMapper;
import cn.bunny.services.service.system.RouterService;
import cn.bunny.services.utils.RoleUtil;
import cn.bunny.services.utils.RouterServiceUtil;
import cn.bunny.services.utils.system.RoleUtil;
import cn.bunny.services.utils.system.RouterServiceUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

View File

@ -11,7 +11,7 @@ import cn.bunny.services.exception.AuthCustomerException;
import cn.bunny.services.mapper.system.UserMapper;
import cn.bunny.services.mapper.system.UserRoleMapper;
import cn.bunny.services.service.system.UserRoleService;
import cn.bunny.services.utils.UserUtil;
import cn.bunny.services.utils.system.UserUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;

View File

@ -26,13 +26,13 @@ import cn.bunny.services.mapper.system.UserRoleMapper;
import cn.bunny.services.service.system.FilesService;
import cn.bunny.services.service.system.UserService;
import cn.bunny.services.utils.JwtHelper;
import cn.bunny.services.utils.UserUtil;
import cn.bunny.services.utils.email.ConcreteSenderEmailTemplate;
import cn.bunny.services.utils.ip.IpUtil;
import cn.bunny.services.utils.login.DefaultLoginStrategy;
import cn.bunny.services.utils.login.EmailLoginStrategy;
import cn.bunny.services.utils.login.LoginContext;
import cn.bunny.services.utils.login.LoginStrategy;
import cn.bunny.services.utils.system.UserUtil;
import cn.hutool.captcha.CaptchaUtil;
import cn.hutool.captcha.CircleCaptcha;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;

View File

@ -83,6 +83,7 @@ public class JwtHelper {
* @return token
*/
public static String createTokenWithMap(Map<String, Object> map, String tokenSignKey) {
return Jwts.builder()
.subject(subject)
.expiration(time)
@ -239,18 +240,8 @@ public class JwtHelper {
}
}
/**
* 根据token获取主题
*
* @param token token
* @return 主题
*/
public static String getSubjectByToken(String token) {
return getSubjectByTokenHandler(token, tokenSignKey);
}
@Nullable
private static String getSubjectByTokenHandler(String token, String tokenSignKey) {
private static String getSubjectByTokenHandler(String token) {
try {
if (!StringUtils.hasText(token)) throw new AuthCustomerException(ResultCodeEnum.TOKEN_PARSING_FAILED);
Jws<Claims> claimsJws = Jwts.parser().verifyWith(key).build().parseSignedClaims(token);
@ -269,8 +260,8 @@ public class JwtHelper {
* @param token token
* @return 主题
*/
public static String getSubjectByToken(String token, String tokenSignKey) {
return getSubjectByTokenHandler(token, tokenSignKey);
public static String getSubjectByToken(String token) {
return getSubjectByTokenHandler(token);
}
/**
@ -317,27 +308,16 @@ public class JwtHelper {
* @return 是否过期
*/
public static boolean isExpired(String token) {
return isExpiredUtil(token, tokenSignKey);
}
/**
* 判断token是否过期
*
* @param token token
* @return 是否过期
*/
public static boolean isExpired(String token, String tokenSignKey) {
return isExpiredUtil(token, tokenSignKey);
return isExpiredUtil(token);
}
/**
* 判断是否过期
*
* @param token token
* @param tokenSignKey key值
* @param token token
* @return 是否过期
*/
private static boolean isExpiredUtil(String token, String tokenSignKey) {
private static boolean isExpiredUtil(String token) {
try {
Jws<Claims> claimsJws = Jwts.parser().verifyWith(key).build().parseSignedClaims(token);
Date expiration = claimsJws.getPayload().getExpiration();

View File

@ -12,14 +12,11 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import jakarta.mail.MessagingException;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.List;
@Component
public abstract class AbstractSenderEmailTemplate {
@Autowired
private EmailUsersMapper emailUsersMapper;
@ -38,7 +35,10 @@ public abstract class AbstractSenderEmailTemplate {
Long emailUser = emailTemplate.getEmailUser();
EmailUsers emailUsers;
if (emailUser == null) {
// 如果用户不存在就是用默认用户进行邮件发送
emailUsers = emailUsersMapper.selectOne(Wrappers.<EmailUsers>lambdaQuery().eq(EmailUsers::getIsDefault, true));
// 默认发送用户也不存在
if (emailUsers == null) throw new AuthCustomerException(ResultCodeEnum.EMAIL_USER_IS_EMPTY);
} else {
emailUsers = emailUsersMapper.selectOne(Wrappers.<EmailUsers>lambdaQuery().eq(EmailUsers::getId, emailUser));

View File

@ -3,15 +3,17 @@ package cn.bunny.services.utils.email;
import cn.bunny.dao.entity.system.EmailTemplate;
import cn.bunny.services.mapper.configuration.EmailTemplateMapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.HashMap;
@Component
public class ConcreteSenderEmailTemplate extends AbstractSenderEmailTemplate {
@Autowired
private EmailTemplateMapper emailTemplateMapper;
private final EmailTemplateMapper emailTemplateMapper;
public ConcreteSenderEmailTemplate(EmailTemplateMapper emailTemplateMapper) {
this.emailTemplateMapper = emailTemplateMapper;
}
/**
* 发送邮件模板

View File

@ -14,6 +14,9 @@ import java.net.InetAddress;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 用户请求的IP地址转成归属地
*/
@Slf4j
public class IpUtil {

View File

@ -12,6 +12,9 @@ import org.springframework.web.multipart.MultipartFile;
import java.util.Objects;
import java.util.Properties;
/**
* 邮件发送工具
*/
public class MailSenderUtil {
private MailSenderUtil() {
// 私有化构造器

View File

@ -1,5 +1,6 @@
Configuration example
# 在配置文件中的参考
mail:
host: smtp.qq.com # 邮箱地址
port: 465 # 邮箱端口号

View File

@ -2,7 +2,6 @@ package cn.bunny.services.utils.minio;
import io.minio.MinioClient;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
@ -12,16 +11,15 @@ import org.springframework.context.annotation.Configuration;
@ConfigurationProperties(prefix = "bunny.minio")
@ConditionalOnProperty(name = "bunny.minio.bucket-name")// 当属性有值时这个配置才生效
@Data
@Slf4j
public class MinioProperties {
// 地址
/* 地址 */
private String endpointUrl;
// 访问秘钥
/* 访问秘钥 */
private String accessKey;
// 私有秘钥
/* 私有秘钥 */
private String secretKey;
// 桶名称
/* 桶名称 */
private String bucketName;
@Bean

View File

@ -8,7 +8,6 @@ import io.minio.*;
import io.minio.messages.DeleteError;
import io.minio.messages.DeleteObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;
@ -22,16 +21,19 @@ import java.util.UUID;
/**
* Minio操作工具类 简化操作步骤
* ByBunny0212
* 自定义封装
*/
@Component
@Slf4j
public class MinioUtil {
@Autowired
private MinioProperties properties;
private final MinioProperties properties;
@Autowired
private MinioClient minioClient;
private final MinioClient minioClient;
public MinioUtil(MinioProperties properties, MinioClient minioClient) {
this.properties = properties;
this.minioClient = minioClient;
}
/**
* 获取Minio文件路径

View File

@ -1,11 +1,16 @@
package cn.bunny.services.utils;
package cn.bunny.services.utils.system;
import org.springframework.stereotype.Component;
@Component
/*
* 文件工具类
* 格式化字节大小
*/
public class FileUtil {
/**
* * 获取文件大小字符串
* 获取文件大小字符串
*
* @param fileSize 文件大小
* @return 格式化后文件大小
*/
public static String getSize(Long fileSize) {
double fileSizeInKB = fileSize / 1024.00;

View File

@ -1,4 +1,4 @@
package cn.bunny.services.utils;
package cn.bunny.services.utils.system;
import cn.bunny.dao.constant.RedisUserConstant;
import cn.bunny.dao.entity.system.AdminUser;

View File

@ -1,4 +1,4 @@
package cn.bunny.services.utils;
package cn.bunny.services.utils.system;
import cn.bunny.dao.vo.system.router.UserRouterVo;
import org.jetbrains.annotations.NotNull;

View File

@ -1,4 +1,4 @@
package cn.bunny.services.utils;
package cn.bunny.services.utils.system;
import cn.bunny.dao.constant.LocalDateTimeConstant;
import cn.bunny.dao.constant.RedisUserConstant;
@ -13,11 +13,12 @@ import cn.bunny.services.mapper.log.UserLoginLogMapper;
import cn.bunny.services.mapper.system.PowerMapper;
import cn.bunny.services.mapper.system.RoleMapper;
import cn.bunny.services.mapper.system.UserMapper;
import cn.bunny.services.utils.JwtHelper;
import cn.bunny.services.utils.ip.IpUtil;
import cn.bunny.services.utils.minio.MinioUtil;
import jakarta.servlet.http.HttpServletRequest;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
@ -33,25 +34,24 @@ import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@RequiredArgsConstructor
@Component
public class UserUtil {
@Autowired
private PowerMapper powerMapper;
private final MinioUtil minioUtil;
private final PowerMapper powerMapper;
private final RoleMapper roleMapper;
private final UserMapper userMapper;
private final UserLoginLogMapper userLoginLogMapper;
private final RedisTemplate<String, Object> redisTemplate;
@Autowired
private RoleMapper roleMapper;
@Autowired
private UserMapper userMapper;
@Autowired
private UserLoginLogMapper userLoginLogMapper;
@Autowired
private RedisTemplate<String, Object> redisTemplate;
@Autowired
private MinioUtil minioUtil;
// public UserUtil(MinioUtil minioUtil, PowerMapper powerMapper, RoleMapper roleMapper, UserMapper userMapper, UserLoginLogMapper userLoginLogMapper, RedisTemplate<String, Object> redisTemplate) {
// this.minioUtil = minioUtil;
// this.powerMapper = powerMapper;
// this.roleMapper = roleMapper;
// this.userMapper = userMapper;
// this.userLoginLogMapper = userLoginLogMapper;
// this.redisTemplate = redisTemplate;
// }
/**
* 构建登录用户返回对象

View File

@ -6,7 +6,7 @@ import cn.bunny.dao.entity.system.AdminUser;
import cn.bunny.dao.vo.result.Result;
import cn.bunny.dao.vo.system.user.LoginVo;
import cn.bunny.services.mapper.system.UserMapper;
import cn.bunny.services.utils.UserUtil;
import cn.bunny.services.utils.system.UserUtil;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.TypeReference;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;

View File

@ -1,19 +0,0 @@
package cn.bunny.services.service.impl;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.security.crypto.password.PasswordEncoder;
@SpringBootTest
class UserServiceImplTest {
@Autowired
private PasswordEncoder passwordEncoder;
@Test
void updateUserPasswordByAdmin() {
String encode = passwordEncoder.encode("123456");
System.out.println(encode);
}
}

View File

@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.security.crypto.password.PasswordEncoder;
import java.util.HashMap;
@ -14,9 +15,18 @@ class ConcreteSenderEmailTemplateTest extends AbstractSenderEmailTemplate {
@Autowired
private EmailTemplateMapper emailTemplateMapper;
@Autowired
private PasswordEncoder passwordEncoder;
@Test
void sendEmailTemplate() {
EmailTemplate emailTemplate = emailTemplateMapper.selectOne(Wrappers.<EmailTemplate>lambdaQuery().eq(EmailTemplate::getId, 1791870020197625858L));
sendEmail("1319900154@qq.com", emailTemplate, new HashMap<>());
sendEmail("xaher94124@birige.com", emailTemplate, new HashMap<>());
}
@Test
void updateUserPasswordByAdmin() {
String encode = passwordEncoder.encode("123456");
System.out.println(encode);
}
}