From 3fab56df80b8ad34ac8f00644854c743604feb58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Mon, 16 Jun 2025 09:32:35 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wms/admin/controller/MenuController.java | 4 --- .../admin/controller/SsoClientController.java | 6 ++-- .../nflg/wms/admin/pojo/dto/LdapUserDTO.java | 2 -- .../auth/controller/SsoServerController.java | 15 +++------- .../com/nflg/wms/gateway/AuthService.java | 9 ++++-- .../wms/gateway/filter/TraceIdFilter.java | 30 ++++++++++++------- .../wms/repository/mapper/UserMapper.java | 1 + .../wms/repository/service/IUserService.java | 2 ++ .../service/impl/UserServiceImpl.java | 5 ++++ .../src/main/resources/mapper/UserMapper.xml | 11 +++++-- .../wms/starter/config/JacksonConfig.java | 5 +++- .../nflg/wms/starter/config/RedisConfig.java | 18 ++++++----- pom.xml | 2 +- 13 files changed, 68 insertions(+), 42 deletions(-) diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/MenuController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/MenuController.java index 23984145..b5af5540 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/MenuController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/MenuController.java @@ -1,7 +1,5 @@ package com.nflg.wms.admin.controller; -import cn.hutool.core.collection.CollectionUtil; -import com.baomidou.mybatisplus.core.metadata.IPage; import com.nflg.wms.admin.service.MenuControllerService; import com.nflg.wms.common.pojo.ApiResult; import com.nflg.wms.common.pojo.PageData; @@ -9,7 +7,6 @@ import com.nflg.wms.common.pojo.qo.*; import com.nflg.wms.common.pojo.vo.ApiVO; import com.nflg.wms.common.pojo.vo.MenuButtonVO; import com.nflg.wms.common.pojo.vo.MenuVO; -import com.nflg.wms.repository.entity.DictionaryItem; import com.nflg.wms.starter.BaseController; import com.nflg.wms.starter.annotation.ApiMark; import jakarta.annotation.Resource; @@ -17,7 +14,6 @@ import jakarta.validation.Valid; import org.springframework.web.bind.annotation.*; import java.util.List; -import java.util.Objects; /** * 菜单管理 diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/SsoClientController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/SsoClientController.java index 1b3778ff..9db4e2d2 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/SsoClientController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/SsoClientController.java @@ -3,6 +3,7 @@ package com.nflg.wms.admin.controller; import cn.dev33.satoken.sso.processor.SaSsoClientProcessor; import cn.dev33.satoken.stp.StpUtil; import com.nflg.wms.common.pojo.ApiResult; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -10,6 +11,7 @@ import org.springframework.web.bind.annotation.RestController; * Sa-Token SSO */ @RestController +@RequestMapping("/sso") public class SsoClientController { // // 首页 @@ -26,7 +28,7 @@ public class SsoClientController { /** * 判断是否登录 **/ - @RequestMapping("/sso/isLogin") + @GetMapping("/isLogin") public ApiResult isLogin() { return ApiResult.success(StpUtil.isLogin()); } @@ -34,7 +36,7 @@ public class SsoClientController { /** * 返回SSO认证中心登录地址 **/ - @RequestMapping("/sso/getLoginUrl") + @GetMapping("/getLoginUrl") public ApiResult getLoginUrl() { // String serverAuthUrl = SaSsoUtil.buildServerAuthUrl(clientLoginUrl, ""); // return ApiResult.success(serverAuthUrl); diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/pojo/dto/LdapUserDTO.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/pojo/dto/LdapUserDTO.java index 6bb84cb2..1a87d0c5 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/pojo/dto/LdapUserDTO.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/pojo/dto/LdapUserDTO.java @@ -10,8 +10,6 @@ import java.util.UUID; @Accessors(chain = true) public class LdapUserDTO { - private Long id; - /** * 用户名 */ diff --git a/nflg-wms-auth/src/main/java/com/nflg/wms/auth/controller/SsoServerController.java b/nflg-wms-auth/src/main/java/com/nflg/wms/auth/controller/SsoServerController.java index 030744c1..55f27bb5 100644 --- a/nflg-wms-auth/src/main/java/com/nflg/wms/auth/controller/SsoServerController.java +++ b/nflg-wms-auth/src/main/java/com/nflg/wms/auth/controller/SsoServerController.java @@ -33,6 +33,7 @@ import java.util.stream.Collectors; * Sa-Token-SSO Server端 */ @RestController +@RequestMapping("/sso") public class SsoServerController { private static final PasswordEncoder PASSWORDENCODER = new BCryptPasswordEncoder(); @@ -44,18 +45,10 @@ public class SsoServerController { private IUserRoleMapService userRoleMapService; /** - * 处理所有SSO相关请求 + * 登录 */ - @RequestMapping("/sso/*") - public Object ssoRequest() { - return SaSsoServerProcessor.instance.dister(); - } - - /** - * 处理所有SSO相关请求 - */ - @PostMapping("/sso/*") - public Object ssoRequest1() { + @PostMapping("/doLogin") + public Object doLogin() { return SaSsoServerProcessor.instance.dister(); } diff --git a/nflg-wms-gateway/src/main/java/com/nflg/wms/gateway/AuthService.java b/nflg-wms-gateway/src/main/java/com/nflg/wms/gateway/AuthService.java index 223869ff..281e89df 100644 --- a/nflg-wms-gateway/src/main/java/com/nflg/wms/gateway/AuthService.java +++ b/nflg-wms-gateway/src/main/java/com/nflg/wms/gateway/AuthService.java @@ -1,11 +1,16 @@ package com.nflg.wms.gateway; +import com.nflg.wms.repository.service.IUserService; +import jakarta.annotation.Resource; import org.springframework.stereotype.Component; @Component public class AuthService { + @Resource + private IUserService userService; + public boolean hasPermission(Long userId,String url) { - return true; + return userService.hasPermission(userId,url); } -} +} \ No newline at end of file diff --git a/nflg-wms-gateway/src/main/java/com/nflg/wms/gateway/filter/TraceIdFilter.java b/nflg-wms-gateway/src/main/java/com/nflg/wms/gateway/filter/TraceIdFilter.java index 6e4c6a74..0287f1ad 100644 --- a/nflg-wms-gateway/src/main/java/com/nflg/wms/gateway/filter/TraceIdFilter.java +++ b/nflg-wms-gateway/src/main/java/com/nflg/wms/gateway/filter/TraceIdFilter.java @@ -12,26 +12,36 @@ import org.springframework.stereotype.Component; import org.springframework.web.server.ServerWebExchange; import reactor.core.publisher.Mono; +import java.util.Optional; + @Component public class TraceIdFilter implements GlobalFilter, Ordered { @Override public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { - // 从请求头中获取 TraceId - String traceId = exchange.getRequest().getHeaders().getFirst(Constant.TRACE_ID_HEADER); - // 如果没有就生成新的 - if (StrUtil.isBlank(traceId)) { - traceId = IdUtil.getSnowflakeNextIdStr(); - } - // 将 TraceId 放入请求头中 + // 获取 TraceId + String traceId = Optional.ofNullable( + exchange.getRequest().getHeaders().getFirst(Constant.TRACE_ID_HEADER)) + .orElse(IdUtil.getSnowflakeNextIdStr()); + + // 构建新请求并注入 TraceId 到 header ServerHttpRequest mutatedRequest = exchange.getRequest().mutate() .header(Constant.TRACE_ID_HEADER, traceId) .build(); - // 将 TraceId 写入 MDC(用于日志) + + // 设置 MDC(用于日志) MDC.put(Constant.TRACE_ID, traceId); - // 清理 MDC 防止内存泄漏 + + // 继续过滤链 return chain.filter(exchange.mutate().request(mutatedRequest).build()) - .doFinally(signalType -> MDC.remove(Constant.TRACE_ID)); + .contextWrite(ctx -> ctx.put(Constant.TRACE_ID, traceId)) + .doFinally(signalType -> { + // 添加 traceId 到响应头(防止响应头已被提交) + if (!exchange.getResponse().isCommitted()) { + exchange.getResponse().getHeaders().add(Constant.TRACE_ID_HEADER, traceId); + } + MDC.remove(Constant.TRACE_ID); + }); } @Override diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/UserMapper.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/UserMapper.java index 07d512be..5f738a4e 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/UserMapper.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/UserMapper.java @@ -13,4 +13,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; */ public interface UserMapper extends BaseMapper { + boolean hasPermission(Long userId, String url); } diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IUserService.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IUserService.java index 2175491b..9208988c 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IUserService.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IUserService.java @@ -26,4 +26,6 @@ public interface IUserService extends IService { void update(List users); void delete(Long id); + + boolean hasPermission(Long userId, String url); } diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/UserServiceImpl.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/UserServiceImpl.java index d2188fa7..3f96aa0c 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/UserServiceImpl.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/UserServiceImpl.java @@ -74,4 +74,9 @@ public class UserServiceImpl extends ServiceImpl implements IU VUtil.trueThrowBusinessError(Objects.isNull(user)).throwMessage("用户不存在"); auditLogService.addDelete(User.class, user, UserUtil.getUserName()); } + + @Override + public boolean hasPermission(Long userId, String url) { + return baseMapper.hasPermission(userId,url); + } } diff --git a/nflg-wms-repository/src/main/resources/mapper/UserMapper.xml b/nflg-wms-repository/src/main/resources/mapper/UserMapper.xml index 359106f7..d78da922 100644 --- a/nflg-wms-repository/src/main/resources/mapper/UserMapper.xml +++ b/nflg-wms-repository/src/main/resources/mapper/UserMapper.xml @@ -1,5 +1,12 @@ - - + + \ No newline at end of file diff --git a/nflg-wms-starter/src/main/java/com/nflg/wms/starter/config/JacksonConfig.java b/nflg-wms-starter/src/main/java/com/nflg/wms/starter/config/JacksonConfig.java index b67f8874..23338a13 100644 --- a/nflg-wms-starter/src/main/java/com/nflg/wms/starter/config/JacksonConfig.java +++ b/nflg-wms-starter/src/main/java/com/nflg/wms/starter/config/JacksonConfig.java @@ -8,6 +8,7 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; +import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; @@ -20,6 +21,8 @@ public class JacksonConfig { .serializerByType(Long.class, new ToStringSerializer()) .serializerByType(Long.TYPE, new ToStringSerializer()) .serializerByType(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN))) - .deserializerByType(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN))); + .deserializerByType(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN))) + .serializerByType(LocalDate.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN))) + .deserializerByType(LocalDate.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN))); } } \ No newline at end of file diff --git a/nflg-wms-starter/src/main/java/com/nflg/wms/starter/config/RedisConfig.java b/nflg-wms-starter/src/main/java/com/nflg/wms/starter/config/RedisConfig.java index b2df599e..159d14d9 100644 --- a/nflg-wms-starter/src/main/java/com/nflg/wms/starter/config/RedisConfig.java +++ b/nflg-wms-starter/src/main/java/com/nflg/wms/starter/config/RedisConfig.java @@ -14,11 +14,13 @@ public class RedisConfig { public RedisTemplate redisObjectTemplate(RedisConnectionFactory redisConnectionFactory) { RedisTemplate template = new RedisTemplate<>(); template.setConnectionFactory(redisConnectionFactory); + StringRedisSerializer serializer = new StringRedisSerializer(); // 设置 Key 的序列化器 - template.setKeySerializer(new StringRedisSerializer()); + template.setKeySerializer(serializer); // 设置 Value 的序列化器 - template.setValueSerializer(new GenericJackson2JsonRedisSerializer()); - template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer()); + template.setValueSerializer(serializer); + template.setHashValueSerializer(serializer); + template.afterPropertiesSet(); return template; } @@ -26,14 +28,16 @@ public class RedisConfig { public RedisTemplate redisStringTemplate(RedisConnectionFactory redisConnectionFactory) { RedisTemplate template = new RedisTemplate<>(); template.setConnectionFactory(redisConnectionFactory); + StringRedisSerializer serializer = new StringRedisSerializer(); // 设置 Key 的序列化器 - template.setKeySerializer(new StringRedisSerializer()); + template.setKeySerializer(serializer); // 设置 Value 的序列化器 - template.setValueSerializer(new GenericJackson2JsonRedisSerializer()); + template.setValueSerializer(serializer); // 设置 Hash Key 的序列化器 - template.setHashKeySerializer(new StringRedisSerializer()); + template.setHashKeySerializer(serializer); // 设置 Hash Value 的序列化器 - template.setHashValueSerializer(new StringRedisSerializer()); + template.setHashValueSerializer(serializer); + template.afterPropertiesSet(); return template; } } diff --git a/pom.xml b/pom.xml index 80b257ce..9869f9a6 100644 --- a/pom.xml +++ b/pom.xml @@ -33,7 +33,7 @@ 2023.0.1.0 5.8.37 1.42.0 - 3.5.9 + 3.5.12 42.7.5 3.17.4