From aa4f062026905f41534b33b2635e4c053dfe8f08 Mon Sep 17 00:00:00 2001 From: Odboy Date: Wed, 25 Feb 2026 20:34:13 +0800 Subject: [PATCH] =?UTF-8?q?refactor(framework):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E7=BB=93=E6=9E=84=E5=92=8C=E6=80=A7=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../context/KitSpringBeanHolder.java | 1 + .../odboy/framework/redis/KitRedisHelper.java | 10 +++---- .../server/core/ConfigurerAdapter.java | 15 ++++++---- .../framework/bizlock/BizLockAspect.java | 2 +- .../mybatisplus/MpMetaObjectHandler.java | 12 ++------ .../permission/core/KitSecurityHelper.java | 15 ++++++++++ .../permission/core/handler/TokenFilter.java | 2 +- .../core/handler/TokenProvider.java | 10 +++---- .../system/framework/quartz/QuartzManage.java | 14 +++++---- .../system/service/SystemMenuService.java | 2 +- .../service/SystemQuartzJobService.java | 25 ++++++++++------ .../context/KitSpringBeanHolder.java | 1 + .../cn/odboy/framework/doc/SwaggerConfig.java | 1 + .../odboy/framework/redis/KitRedisHelper.java | 30 ++++++++++--------- .../server/core/ConfigurerAdapter.java | 15 ++++++---- .../framework/bizlock/BizLockAspect.java | 2 +- .../mybatisplus/MpMetaObjectHandler.java | 12 ++------ .../permission/core/KitSecurityHelper.java | 15 ++++++++++ .../permission/core/handler/TokenFilter.java | 2 +- .../core/handler/TokenProvider.java | 10 +++---- .../system/framework/quartz/QuartzManage.java | 14 +++++---- .../system/service/SystemMenuService.java | 2 +- .../service/SystemQuartzJobService.java | 26 ++++++++++------ .../impl/SystemMinioStorageServiceImpl.java | 26 ++++++---------- 24 files changed, 153 insertions(+), 111 deletions(-) diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/context/KitSpringBeanHolder.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/context/KitSpringBeanHolder.java index 4e7f2a8d..8f082895 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/context/KitSpringBeanHolder.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/context/KitSpringBeanHolder.java @@ -51,6 +51,7 @@ public class KitSpringBeanHolder implements ApplicationContextAware, DisposableB /** * 从静态变量applicationContext中取得Bean, 自动转型为所赋值对象的类型. */ + @SuppressWarnings("all") public static T getBean(String name) { assertContextInjected(); return (T) applicationContext.getBean(name); diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/redis/KitRedisHelper.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/redis/KitRedisHelper.java index 26f724e9..1b5bd19c 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/redis/KitRedisHelper.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/redis/KitRedisHelper.java @@ -261,13 +261,11 @@ public class KitRedisHelper { return null; } // 如果 value 不是目标类型, 则尝试将其反序列化为 clazz 类型 - if (!clazz.isInstance(value)) { - return JSON.parseObject(value.toString(), clazz); - } else if (clazz.isInstance(value)) { + boolean isInstance = clazz.isInstance(value); + if (isInstance) { return clazz.cast(value); - } else { - return null; } + return JSON.parseObject(value.toString(), clazz); } /** @@ -631,7 +629,7 @@ public class KitRedisHelper { public long setRemove(String key, Object... values) { try { Long count = redisTemplate.opsForSet().remove(key, values); - return count; + return count == null ? 0 : count; } catch (Exception e) { log.error(e.getMessage(), e); return 0; diff --git a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/server/core/ConfigurerAdapter.java b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/server/core/ConfigurerAdapter.java index e1cda590..9f3459f8 100644 --- a/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/server/core/ConfigurerAdapter.java +++ b/cutejava-springboot3/cutejava-framework/src/main/java/cn/odboy/framework/server/core/ConfigurerAdapter.java @@ -87,6 +87,15 @@ public class ConfigurerAdapter implements WebMvcConfigurer { FastJsonHttpMessageConverter fastJsonConverter = new FastJsonHttpMessageConverter(); List supportMediaTypeList = new ArrayList<>(); supportMediaTypeList.add(MediaType.APPLICATION_JSON); + FastJsonConfig config = this.getFastJsonConfig(); + fastJsonConverter.setFastJsonConfig(config); + fastJsonConverter.setSupportedMediaTypes(supportMediaTypeList); + fastJsonConverter.setDefaultCharset(StandardCharsets.UTF_8); + // 将 FastJsonHttpMessageConverter 添加到列表末尾 + converters.add(fastJsonConverter); + } + + private FastJsonConfig getFastJsonConfig() { FastJsonConfig config = new FastJsonConfig(); config.setDateFormat("yyyy-MM-dd HH:mm:ss"); // 开启引用检测, 枚举支持 @@ -104,11 +113,7 @@ public class ConfigurerAdapter implements WebMvcConfigurer { // config.setWriterFeatures(JSONWriter.Feature.WriteLongAsString); config.setWriterFeatures(JSONWriter.Feature.WriteEnumUsingToString); config.setWriterFeatures(JSONWriter.Feature.ReferenceDetection); - fastJsonConverter.setFastJsonConfig(config); - fastJsonConverter.setSupportedMediaTypes(supportMediaTypeList); - fastJsonConverter.setDefaultCharset(StandardCharsets.UTF_8); - // 将 FastJsonHttpMessageConverter 添加到列表末尾 - converters.add(fastJsonConverter); + return config; } /** diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/bizlock/BizLockAspect.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/bizlock/BizLockAspect.java index 8ae55e4c..51639674 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/bizlock/BizLockAspect.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/bizlock/BizLockAspect.java @@ -42,7 +42,7 @@ public class BizLockAspect { @Around("@annotation(bizLock)") public Object around(ProceedingJoinPoint joinPoint, BizLock bizLock) throws Throwable { // 解析SpEL表达式生成最终的lockKey - String lockKey = parseLockKey(joinPoint, bizLock); + String lockKey = this.parseLockKey(joinPoint, bizLock); boolean success = redisHelper.setIfAbsent(lockKey, lockKey, bizLock.leaseTime(), bizLock.timeUnit()); if (!success) { throw new BadRequestException(bizLock.errorMessage()); diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/mybatisplus/MpMetaObjectHandler.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/mybatisplus/MpMetaObjectHandler.java index e6a01d5e..69311f7e 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/mybatisplus/MpMetaObjectHandler.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/mybatisplus/MpMetaObjectHandler.java @@ -32,11 +32,7 @@ public class MpMetaObjectHandler implements MetaObjectHandler { this.strictInsertFill(metaObject, "createTime", Date.class, now); this.strictInsertFill(metaObject, "updateTime", Date.class, now); /* 操作人 */ - String username = "System"; - try { - username = KitSecurityHelper.getCurrentUsername(); - } catch (Exception ignored) { - } + String username = KitSecurityHelper.safeGetUsername(); this.strictInsertFill(metaObject, "createBy", String.class, username); this.strictInsertFill(metaObject, "updateBy", String.class, username); } @@ -46,11 +42,7 @@ public class MpMetaObjectHandler implements MetaObjectHandler { /* 更新时间 */ this.strictUpdateFill(metaObject, "updateTime", Date.class, DateTime.now()); /* 操作人 */ - String username = "System"; - try { - username = KitSecurityHelper.getCurrentUsername(); - } catch (Exception ignored) { - } + String username = KitSecurityHelper.safeGetUsername(); this.strictUpdateFill(metaObject, "updateBy", String.class, username); } } diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/KitSecurityHelper.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/KitSecurityHelper.java index d5aa94b9..b20766af 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/KitSecurityHelper.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/KitSecurityHelper.java @@ -26,8 +26,10 @@ import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; import jakarta.servlet.http.HttpServletRequest; + import java.util.List; import java.util.Objects; + import lombok.extern.slf4j.Slf4j; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; @@ -106,6 +108,19 @@ public class KitSecurityHelper { return getCurrentUsername(getToken()); } + /** + * 获取系统用户名称 + * + * @return 系统用户名称 + */ + public static String safeGetUsername() { + try { + return getCurrentUsername(getToken()); + } catch (Exception e) { + return "anonymous"; + } + } + /** * 获取系统用户名称 * diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/TokenFilter.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/TokenFilter.java index 3046d0bc..2cfdffb4 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/TokenFilter.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/TokenFilter.java @@ -51,7 +51,7 @@ public class TokenFilter extends GenericFilterBean { public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws ServletException, IOException { HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest; - String token = resolveToken(httpServletRequest); + String token = this.resolveToken(httpServletRequest); // 对于 Token 为空的不需要去查 Redis if (StrUtil.isNotBlank(token)) { // 获取用户Token的Key diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/TokenProvider.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/TokenProvider.java index 71585bd7..042169d4 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/TokenProvider.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/TokenProvider.java @@ -105,8 +105,8 @@ public class TokenProvider implements InitializingBean { * @param token / * @return / */ - Authentication getAuthentication(String token) { - Claims claims = getClaims(token); + protected Authentication getAuthentication(String token) { + Claims claims = this.getClaims(token); User principal = new User(claims.getSubject(), "******", new ArrayList<>()); return new UsernamePasswordAuthenticationToken(principal, token, new ArrayList<>()); } @@ -123,7 +123,7 @@ public class TokenProvider implements InitializingBean { */ public void checkRenewal(String token) { // 判断是否续期token,计算token的过期时间 - String loginKey = loginKey(token); + String loginKey = this.loginKey(token); long time = redisHelper.getExpire(loginKey) * 1000; Date expireDate = DateUtil.offset(new Date(), DateField.MILLISECOND, (int) time); // 判断当前时间与过期时间的时间差 @@ -150,7 +150,7 @@ public class TokenProvider implements InitializingBean { * @return key */ public String loginKey(String token) { - Claims claims = getClaims(token); + Claims claims = this.getClaims(token); return SystemCacheKey.ONLINE_USER + claims.getSubject() + ":" + getId(token); } @@ -161,7 +161,7 @@ public class TokenProvider implements InitializingBean { * @return / */ public String getId(String token) { - Claims claims = getClaims(token); + Claims claims = this.getClaims(token); return claims.get(AUTHORITIES_UUID_KEY, String.class); } } diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/quartz/QuartzManage.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/quartz/QuartzManage.java index 69d7f765..69c6c15d 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/quartz/QuartzManage.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/framework/quartz/QuartzManage.java @@ -87,7 +87,8 @@ public class QuartzManage { */ public void updateJobCron(SystemQuartzJobTb quartzJob) { try { - TriggerKey triggerKey = TriggerKey.triggerKey(JOB_NAME + quartzJob.getId()); + String uuid = JOB_NAME + quartzJob.getId(); + TriggerKey triggerKey = TriggerKey.triggerKey(uuid); CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey); // 如果不存在则创建一个定时任务 if (trigger == null) { @@ -117,7 +118,8 @@ public class QuartzManage { */ public void deleteJob(SystemQuartzJobTb quartzJob) { try { - JobKey jobKey = JobKey.jobKey(JOB_NAME + quartzJob.getId()); + String uuid = JOB_NAME + quartzJob.getId(); + JobKey jobKey = JobKey.jobKey(uuid); scheduler.pauseJob(jobKey); scheduler.deleteJob(jobKey); } catch (Exception e) { @@ -133,13 +135,14 @@ public class QuartzManage { */ public void resumeJob(SystemQuartzJobTb quartzJob) { try { - TriggerKey triggerKey = TriggerKey.triggerKey(JOB_NAME + quartzJob.getId()); + String uuid = JOB_NAME + quartzJob.getId(); + TriggerKey triggerKey = TriggerKey.triggerKey(uuid); CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey); // 如果不存在则创建一个定时任务 if (trigger == null) { addJob(quartzJob); } - JobKey jobKey = JobKey.jobKey(JOB_NAME + quartzJob.getId()); + JobKey jobKey = JobKey.jobKey(uuid); scheduler.resumeJob(jobKey); } catch (Exception e) { log.error("恢复定时任务失败", e); @@ -178,7 +181,8 @@ public class QuartzManage { */ public void pauseJob(SystemQuartzJobTb quartzJob) { try { - JobKey jobKey = JobKey.jobKey(JOB_NAME + quartzJob.getId()); + String uuid = JOB_NAME + quartzJob.getId(); + JobKey jobKey = JobKey.jobKey(uuid); scheduler.pauseJob(jobKey); } catch (Exception e) { log.error("定时任务暂停失败", e); diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemMenuService.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemMenuService.java index c28b97e6..568556b0 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemMenuService.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemMenuService.java @@ -573,7 +573,7 @@ public class SystemMenuService { menuSet.add(menu); List menus = this.listMenuByPid(menu.getId(), true); if (CollUtil.isNotEmpty(menus)) { - queryChildMenuByArgs(menus, menuSet); + this.queryChildMenuByArgs(menus, menuSet); } } return menuSet; diff --git a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemQuartzJobService.java b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemQuartzJobService.java index 34c6826f..cec3270b 100644 --- a/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemQuartzJobService.java +++ b/cutejava-springboot3/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemQuartzJobService.java @@ -37,6 +37,7 @@ import cn.odboy.util.KitValidUtil; import cn.odboy.util.xlsx.KitExcelExporter; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.jetbrains.annotations.NotNull; import org.quartz.CronExpression; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -237,20 +238,26 @@ public class SystemQuartzJobService { List systemQuartzJobTbs = this.queryQuartzJobByArgs(args); List rowVos = new ArrayList<>(); for (SystemQuartzJobTb dataObject : systemQuartzJobTbs) { - SystemQuartzJobExportRowVo rowVo = new SystemQuartzJobExportRowVo(); - rowVo.setJobName(dataObject.getJobName()); - rowVo.setBeanName(dataObject.getBeanName()); - rowVo.setMethodName(dataObject.getMethodName()); - rowVo.setParams(dataObject.getParams()); - rowVo.setCronExpression(dataObject.getCronExpression()); - rowVo.setIsPause(dataObject.getIsPause() ? "暂停中" : "运行中"); - rowVo.setDescription(dataObject.getDescription()); - rowVo.setCreateTime(dataObject.getCreateTime()); + SystemQuartzJobExportRowVo rowVo = this.getExportRowVo(dataObject); rowVos.add(rowVo); } KitExcelExporter.exportSimple(response, "定时任务数据", SystemQuartzJobExportRowVo.class, rowVos); } + @NotNull + private SystemQuartzJobExportRowVo getExportRowVo(SystemQuartzJobTb dataObject) { + SystemQuartzJobExportRowVo rowVo = new SystemQuartzJobExportRowVo(); + rowVo.setJobName(dataObject.getJobName()); + rowVo.setBeanName(dataObject.getBeanName()); + rowVo.setMethodName(dataObject.getMethodName()); + rowVo.setParams(dataObject.getParams()); + rowVo.setCronExpression(dataObject.getCronExpression()); + rowVo.setIsPause(dataObject.getIsPause() ? "暂停中" : "运行中"); + rowVo.setDescription(dataObject.getDescription()); + rowVo.setCreateTime(dataObject.getCreateTime()); + return rowVo; + } + /** * 导出定时任务日志数据 */ diff --git a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/context/KitSpringBeanHolder.java b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/context/KitSpringBeanHolder.java index 16d4afbc..a1cd1326 100644 --- a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/context/KitSpringBeanHolder.java +++ b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/context/KitSpringBeanHolder.java @@ -51,6 +51,7 @@ public class KitSpringBeanHolder implements ApplicationContextAware, DisposableB /** * 从静态变量applicationContext中取得Bean, 自动转型为所赋值对象的类型. */ + @SuppressWarnings("all") public static T getBean(String name) { assertContextInjected(); return (T) applicationContext.getBean(name); diff --git a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/doc/SwaggerConfig.java b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/doc/SwaggerConfig.java index 0bffa3eb..bfd1af3b 100644 --- a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/doc/SwaggerConfig.java +++ b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/doc/SwaggerConfig.java @@ -86,6 +86,7 @@ public class SwaggerConfig { mappings.addAll(filteredMappings); } + @SuppressWarnings("all") private List getHandlerMappings(Object bean) { Field field = ReflectionUtils.findField(bean.getClass(), "handlerMappings"); if (field != null) { diff --git a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/redis/KitRedisHelper.java b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/redis/KitRedisHelper.java index 04c715c2..b9005474 100644 --- a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/redis/KitRedisHelper.java +++ b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/redis/KitRedisHelper.java @@ -20,6 +20,7 @@ import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson2.JSON; import com.google.common.collect.Lists; import com.google.common.collect.Sets; + import java.util.ArrayList; import java.util.HashSet; import java.util.List; @@ -29,6 +30,7 @@ import java.util.Optional; import java.util.Set; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.data.redis.connection.RedisConnection; @@ -207,16 +209,18 @@ public class KitRedisHelper { * * @param pattern / */ + @SuppressWarnings("all") public void scanDel(String pattern) { ScanOptions options = ScanOptions.scanOptions().match(pattern).count(100).build(); - try (Cursor cursor = redisTemplate.executeWithStickyConnection(connection -> { - try { - return (Cursor) new ConvertingCursor<>( - connection.scan(options), redisTemplate.getKeySerializer()::deserialize); - } catch (Exception e) { - throw new RuntimeException("Redis scan operation failed", e); - } - })) { + try ( + Cursor cursor = redisTemplate.executeWithStickyConnection(connection -> { + try { + return (Cursor) new ConvertingCursor<>(connection.scan(options), redisTemplate.getKeySerializer()::deserialize); + } catch (Exception e) { + throw new RuntimeException("Redis scan operation failed", e); + } + }) + ) { List keysToDelete = new ArrayList<>(); while (cursor.hasNext()) { Object key = cursor.next(); @@ -259,13 +263,11 @@ public class KitRedisHelper { return null; } // 如果 value 不是目标类型, 则尝试将其反序列化为 clazz 类型 - if (!clazz.isInstance(value)) { - return JSON.parseObject(value.toString(), clazz); - } else if (clazz.isInstance(value)) { + boolean isInstance = clazz.isInstance(value); + if (isInstance) { return clazz.cast(value); - } else { - return null; } + return JSON.parseObject(value.toString(), clazz); } /** @@ -629,7 +631,7 @@ public class KitRedisHelper { public long setRemove(String key, Object... values) { try { Long count = redisTemplate.opsForSet().remove(key, values); - return count; + return count == null ? 0 : count; } catch (Exception e) { log.error(e.getMessage(), e); return 0; diff --git a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/server/core/ConfigurerAdapter.java b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/server/core/ConfigurerAdapter.java index f784e907..74cff4d0 100644 --- a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/server/core/ConfigurerAdapter.java +++ b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/server/core/ConfigurerAdapter.java @@ -86,6 +86,15 @@ public class ConfigurerAdapter implements WebMvcConfigurer { FastJsonHttpMessageConverter fastJsonConverter = new FastJsonHttpMessageConverter(); List supportMediaTypeList = new ArrayList<>(); supportMediaTypeList.add(MediaType.APPLICATION_JSON); + FastJsonConfig config = this.getFastJsonConfig(); + fastJsonConverter.setFastJsonConfig(config); + fastJsonConverter.setSupportedMediaTypes(supportMediaTypeList); + fastJsonConverter.setDefaultCharset(StandardCharsets.UTF_8); + // 将 FastJsonHttpMessageConverter 添加到列表末尾 + converters.add(fastJsonConverter); + } + + private FastJsonConfig getFastJsonConfig() { FastJsonConfig config = new FastJsonConfig(); config.setDateFormat("yyyy-MM-dd HH:mm:ss"); // 开启引用检测, 枚举支持 @@ -103,11 +112,7 @@ public class ConfigurerAdapter implements WebMvcConfigurer { // config.setWriterFeatures(JSONWriter.Feature.WriteLongAsString); config.setWriterFeatures(JSONWriter.Feature.WriteEnumUsingToString); config.setWriterFeatures(JSONWriter.Feature.ReferenceDetection); - fastJsonConverter.setFastJsonConfig(config); - fastJsonConverter.setSupportedMediaTypes(supportMediaTypeList); - fastJsonConverter.setDefaultCharset(StandardCharsets.UTF_8); - // 将 FastJsonHttpMessageConverter 添加到列表末尾 - converters.add(fastJsonConverter); + return config; } /** diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/bizlock/BizLockAspect.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/bizlock/BizLockAspect.java index 8ae55e4c..51639674 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/bizlock/BizLockAspect.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/bizlock/BizLockAspect.java @@ -42,7 +42,7 @@ public class BizLockAspect { @Around("@annotation(bizLock)") public Object around(ProceedingJoinPoint joinPoint, BizLock bizLock) throws Throwable { // 解析SpEL表达式生成最终的lockKey - String lockKey = parseLockKey(joinPoint, bizLock); + String lockKey = this.parseLockKey(joinPoint, bizLock); boolean success = redisHelper.setIfAbsent(lockKey, lockKey, bizLock.leaseTime(), bizLock.timeUnit()); if (!success) { throw new BadRequestException(bizLock.errorMessage()); diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/mybatisplus/MpMetaObjectHandler.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/mybatisplus/MpMetaObjectHandler.java index c5e5fec5..c318fef8 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/mybatisplus/MpMetaObjectHandler.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/mybatisplus/MpMetaObjectHandler.java @@ -32,11 +32,7 @@ public class MpMetaObjectHandler implements MetaObjectHandler { this.strictInsertFill(metaObject, "createTime", Date.class, now); this.strictInsertFill(metaObject, "updateTime", Date.class, now); /* 操作人 */ - String username = "System"; - try { - username = KitSecurityHelper.getCurrentUsername(); - } catch (Exception ignored) { - } + String username = KitSecurityHelper.safeGetUsername(); this.strictInsertFill(metaObject, "createBy", String.class, username); this.strictInsertFill(metaObject, "updateBy", String.class, username); } @@ -46,11 +42,7 @@ public class MpMetaObjectHandler implements MetaObjectHandler { /* 更新时间 */ this.strictUpdateFill(metaObject, "updateTime", Date.class, DateTime.now()); /* 操作人 */ - String username = "System"; - try { - username = KitSecurityHelper.getCurrentUsername(); - } catch (Exception ignored) { - } + String username = KitSecurityHelper.safeGetUsername(); this.strictUpdateFill(metaObject, "updateBy", String.class, username); } } diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/KitSecurityHelper.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/KitSecurityHelper.java index 5a54d68d..fd3ff040 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/KitSecurityHelper.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/KitSecurityHelper.java @@ -24,9 +24,11 @@ import cn.odboy.system.constant.SystemDataScopeEnum; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; + import java.util.List; import java.util.Objects; import javax.servlet.http.HttpServletRequest; + import lombok.extern.slf4j.Slf4j; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; @@ -105,6 +107,19 @@ public class KitSecurityHelper { return getCurrentUsername(getToken()); } + /** + * 获取系统用户名称 + * + * @return 系统用户名称 + */ + public static String safeGetUsername() { + try { + return getCurrentUsername(getToken()); + } catch (Exception e) { + return "anonymous"; + } + } + /** * 获取系统用户名称 * diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/TokenFilter.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/TokenFilter.java index 0498a432..c09f6af7 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/TokenFilter.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/TokenFilter.java @@ -50,7 +50,7 @@ public class TokenFilter extends GenericFilterBean { public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws ServletException, IOException { HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest; - String token = resolveToken(httpServletRequest); + String token = this.resolveToken(httpServletRequest); // 对于 Token 为空的不需要去查 Redis if (StrUtil.isNotBlank(token)) { // 获取用户Token的Key diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/TokenProvider.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/TokenProvider.java index dc83894b..2b868590 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/TokenProvider.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/TokenProvider.java @@ -104,8 +104,8 @@ public class TokenProvider implements InitializingBean { * @param token / * @return / */ - Authentication getAuthentication(String token) { - Claims claims = getClaims(token); + protected Authentication getAuthentication(String token) { + Claims claims = this.getClaims(token); User principal = new User(claims.getSubject(), "******", new ArrayList<>()); return new UsernamePasswordAuthenticationToken(principal, token, new ArrayList<>()); } @@ -122,7 +122,7 @@ public class TokenProvider implements InitializingBean { */ public void checkRenewal(String token) { // 判断是否续期token,计算token的过期时间 - String loginKey = loginKey(token); + String loginKey = this.loginKey(token); long time = redisHelper.getExpire(loginKey) * 1000; Date expireDate = DateUtil.offset(new Date(), DateField.MILLISECOND, (int) time); // 判断当前时间与过期时间的时间差 @@ -149,7 +149,7 @@ public class TokenProvider implements InitializingBean { * @return key */ public String loginKey(String token) { - Claims claims = getClaims(token); + Claims claims = this.getClaims(token); return SystemCacheKey.ONLINE_USER + claims.getSubject() + ":" + getId(token); } @@ -160,7 +160,7 @@ public class TokenProvider implements InitializingBean { * @return / */ public String getId(String token) { - Claims claims = getClaims(token); + Claims claims = this.getClaims(token); return claims.get(AUTHORITIES_UUID_KEY, String.class); } } diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/quartz/QuartzManage.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/quartz/QuartzManage.java index 3ad0727e..e25b3c59 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/quartz/QuartzManage.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/quartz/QuartzManage.java @@ -88,7 +88,8 @@ public class QuartzManage { */ public void updateJobCron(SystemQuartzJobTb quartzJob) { try { - TriggerKey triggerKey = TriggerKey.triggerKey(JOB_NAME + quartzJob.getId()); + String uuid = JOB_NAME + quartzJob.getId(); + TriggerKey triggerKey = TriggerKey.triggerKey(uuid); CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey); // 如果不存在则创建一个定时任务 if (trigger == null) { @@ -118,7 +119,8 @@ public class QuartzManage { */ public void deleteJob(SystemQuartzJobTb quartzJob) { try { - JobKey jobKey = JobKey.jobKey(JOB_NAME + quartzJob.getId()); + String uuid = JOB_NAME + quartzJob.getId(); + JobKey jobKey = JobKey.jobKey(uuid); scheduler.pauseJob(jobKey); scheduler.deleteJob(jobKey); } catch (Exception e) { @@ -134,13 +136,14 @@ public class QuartzManage { */ public void resumeJob(SystemQuartzJobTb quartzJob) { try { - TriggerKey triggerKey = TriggerKey.triggerKey(JOB_NAME + quartzJob.getId()); + String uuid = JOB_NAME + quartzJob.getId(); + TriggerKey triggerKey = TriggerKey.triggerKey(uuid); CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey); // 如果不存在则创建一个定时任务 if (trigger == null) { addJob(quartzJob); } - JobKey jobKey = JobKey.jobKey(JOB_NAME + quartzJob.getId()); + JobKey jobKey = JobKey.jobKey(uuid); scheduler.resumeJob(jobKey); } catch (Exception e) { log.error("恢复定时任务失败", e); @@ -179,7 +182,8 @@ public class QuartzManage { */ public void pauseJob(SystemQuartzJobTb quartzJob) { try { - JobKey jobKey = JobKey.jobKey(JOB_NAME + quartzJob.getId()); + String uuid = JOB_NAME + quartzJob.getId(); + JobKey jobKey = JobKey.jobKey(uuid); scheduler.pauseJob(jobKey); } catch (Exception e) { log.error("定时任务暂停失败", e); diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemMenuService.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemMenuService.java index fd1cf1b3..fe8eab1b 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemMenuService.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemMenuService.java @@ -573,7 +573,7 @@ public class SystemMenuService { menuSet.add(menu); List menus = this.listMenuByPid(menu.getId(), true); if (CollUtil.isNotEmpty(menus)) { - queryChildMenuByArgs(menus, menuSet); + this.queryChildMenuByArgs(menus, menuSet); } } return menuSet; diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemQuartzJobService.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemQuartzJobService.java index 6d1e903e..ace2af51 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemQuartzJobService.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemQuartzJobService.java @@ -42,6 +42,8 @@ import java.util.Arrays; import java.util.List; import java.util.Set; import javax.servlet.http.HttpServletResponse; + +import org.jetbrains.annotations.NotNull; import org.quartz.CronExpression; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -237,20 +239,26 @@ public class SystemQuartzJobService { List systemQuartzJobTbs = this.queryQuartzJobByArgs(args); List rowVos = new ArrayList<>(); for (SystemQuartzJobTb dataObject : systemQuartzJobTbs) { - SystemQuartzJobExportRowVo rowVo = new SystemQuartzJobExportRowVo(); - rowVo.setJobName(dataObject.getJobName()); - rowVo.setBeanName(dataObject.getBeanName()); - rowVo.setMethodName(dataObject.getMethodName()); - rowVo.setParams(dataObject.getParams()); - rowVo.setCronExpression(dataObject.getCronExpression()); - rowVo.setIsPause(dataObject.getIsPause() ? "暂停中" : "运行中"); - rowVo.setDescription(dataObject.getDescription()); - rowVo.setCreateTime(dataObject.getCreateTime()); + SystemQuartzJobExportRowVo rowVo = this.getExportRowVo(dataObject); rowVos.add(rowVo); } KitExcelExporter.exportSimple(response, "定时任务数据", SystemQuartzJobExportRowVo.class, rowVos); } + @NotNull + private SystemQuartzJobExportRowVo getExportRowVo(SystemQuartzJobTb dataObject) { + SystemQuartzJobExportRowVo rowVo = new SystemQuartzJobExportRowVo(); + rowVo.setJobName(dataObject.getJobName()); + rowVo.setBeanName(dataObject.getBeanName()); + rowVo.setMethodName(dataObject.getMethodName()); + rowVo.setParams(dataObject.getParams()); + rowVo.setCronExpression(dataObject.getCronExpression()); + rowVo.setIsPause(dataObject.getIsPause() ? "暂停中" : "运行中"); + rowVo.setDescription(dataObject.getDescription()); + rowVo.setCreateTime(dataObject.getCreateTime()); + return rowVo; + } + /** * 导出定时任务日志数据 */ diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/impl/SystemMinioStorageServiceImpl.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/impl/SystemMinioStorageServiceImpl.java index 037ae061..0375fa3b 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/impl/SystemMinioStorageServiceImpl.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/impl/SystemMinioStorageServiceImpl.java @@ -39,9 +39,11 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + import java.io.File; import java.util.List; import javax.servlet.http.HttpServletResponse; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -56,8 +58,7 @@ import org.springframework.web.multipart.MultipartFile; * @since 2025-07-15 */ @Service -public class SystemMinioStorageServiceImpl extends ServiceImpl - implements SystemOssStorageService { +public class SystemMinioStorageServiceImpl extends ServiceImpl implements SystemOssStorageService { @Autowired private MinioRepository minioRepository; @@ -69,10 +70,7 @@ public class SystemMinioStorageServiceImpl extends ServiceImpl searchOssStorage( - SystemQueryStorageArgs args, - Page page - ) { + public KitPageResult searchOssStorage(SystemQueryStorageArgs args, Page page) { IPage ossStorageTbs = this.selectOssStorageByArgs(args, page); for (SystemOssStorageVo storageVo : ossStorageTbs.getRecords()) { storageVo.setFileSizeDesc(KitFileUtil.getSize(storageVo.getFileSize())); @@ -85,19 +83,14 @@ public class SystemMinioStorageServiceImpl extends ServiceImpl wrapper = new LambdaQueryWrapper<>(); wrapper.and( StrUtil.isNotBlank(args.getBlurry()), - c -> c.like(SystemOssStorageTb::getFileName, args.getBlurry()).or() - .like(SystemOssStorageTb::getFilePrefix, args.getBlurry()).or() - .like(SystemOssStorageTb::getFileMime, args.getBlurry()).or() - .like(SystemOssStorageTb::getFileMd5, args.getBlurry()) + c -> c.like(SystemOssStorageTb::getFileName, args.getBlurry()).or().like(SystemOssStorageTb::getFilePrefix, args.getBlurry()).or() + .like(SystemOssStorageTb::getFileMime, args.getBlurry()).or().like(SystemOssStorageTb::getFileMd5, args.getBlurry()) ); if (CollUtil.isNotEmpty(args.getCreateTime()) && args.getCreateTime().size() >= 2) { - wrapper.between(SystemOssStorageTb::getUpdateTime, args.getCreateTime().get(0), - args.getCreateTime().get(1) - ); + wrapper.between(SystemOssStorageTb::getUpdateTime, args.getCreateTime().get(0), args.getCreateTime().get(1)); } wrapper.orderByAsc(SystemOssStorageTb::getId); - return systemOssStorageMapper.selectPage(page, wrapper) - .convert(i -> KitBeanUtil.copyToClass(i, SystemOssStorageVo.class)); + return systemOssStorageMapper.selectPage(page, wrapper).convert(i -> KitBeanUtil.copyToClass(i, SystemOssStorageVo.class)); } @Override @@ -161,8 +154,7 @@ public class SystemMinioStorageServiceImpl extends ServiceImpl systemOssStorageVos = this.queryOssStorage(args); // KitXlsxExportUtil.exportFile(response, "OSS文件上传记录数据", systemOssStorageVos, SystemOssStorageExportRowVo.class, // (dataObject) -> CollUtil.newArrayList(KitBeanUtil.copyProperties(dataObject, SystemOssStorageExportRowVo.class))); - List rowVos = - KitBeanUtil.copyToList(systemOssStorageVos, SystemOssStorageExportRowVo.class); + List rowVos = KitBeanUtil.copyToList(systemOssStorageVos, SystemOssStorageExportRowVo.class); KitExcelExporter.exportSimple(response, "OSS文件上传记录数据", SystemOssStorageExportRowVo.class, rowVos); }