From d88eed4d6928efd2a974a26b49121ed0e3098e43 Mon Sep 17 00:00:00 2001 From: skyouc Date: 星期日, 27 四月 2025 07:20:07 +0800 Subject: [PATCH] 动态字段拦截修改优化 --- /dev/null | 35 ------- rsf-server/src/main/java/com/vincent/rsf/server/common/config/WebMvcConfig.java | 2 rsf-server/src/main/java/com/vincent/rsf/server/common/interceptor/severlet/ParameterAddableRequest.java | 61 ++++++++++++ rsf-server/src/main/java/com/vincent/rsf/server/common/interceptor/severlet/DynamicFieldsInterceptor.java | 66 +++++++++++++ rsf-server/src/main/java/com/vincent/rsf/server/common/interceptor/severlet/CustomParameterFilter.java | 37 +++++++ rsf-admin/.env | 2 rsf-server/src/main/java/com/vincent/rsf/server/common/interceptor/severlet/ParameterAddingFilter.java | 52 ++++++++++ 7 files changed, 218 insertions(+), 37 deletions(-) diff --git a/rsf-admin/.env b/rsf-admin/.env index 6801446..a3c69b2 100644 --- a/rsf-admin/.env +++ b/rsf-admin/.env @@ -1,3 +1,3 @@ -VITE_BASE_IP=192.168.4.56 +VITE_BASE_IP=127.0.0.1 # VITE_BASE_IP=47.76.147.249 VITE_BASE_PORT=8080 diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/common/config/WebMvcConfig.java b/rsf-server/src/main/java/com/vincent/rsf/server/common/config/WebMvcConfig.java index 2c74c43..f5b8463 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/common/config/WebMvcConfig.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/common/config/WebMvcConfig.java @@ -1,7 +1,7 @@ package com.vincent.rsf.server.common.config; import com.vincent.rsf.server.common.constant.Constants; -import com.vincent.rsf.server.common.interceptor.DynamicFieldsInterceptor; +import com.vincent.rsf.server.common.interceptor.severlet.DynamicFieldsInterceptor; import com.vincent.rsf.server.common.utils.Http; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/common/interceptor/DynamicFieldsInterceptor.java b/rsf-server/src/main/java/com/vincent/rsf/server/common/interceptor/DynamicFieldsInterceptor.java deleted file mode 100644 index 16c8113..0000000 --- a/rsf-server/src/main/java/com/vincent/rsf/server/common/interceptor/DynamicFieldsInterceptor.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.vincent.rsf.server.common.interceptor; - -import com.vincent.rsf.framework.common.SpringUtils; -import com.vincent.rsf.server.common.utils.FieldsUtils; -import com.vincent.rsf.server.system.entity.Fields; -import com.vincent.rsf.server.system.service.FieldsService; -import lombok.extern.slf4j.Slf4j; -import org.springframework.web.servlet.HandlerInterceptor; -import org.springframework.web.servlet.ModelAndView; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.util.List; -import java.util.Set; -import java.util.stream.Collectors; - -/** - * @author Ryan - * @version 1.0 - * @title DynamicFieldsInterceptor - * @description - * @create 2025/4/16 16:10 - */ -@Slf4j -public class DynamicFieldsInterceptor implements HandlerInterceptor { - - @Override - public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { - List<Fields> fields = FieldsUtils.getFieldsSta(); - List<String> fieldsKey = fields.stream().filter(item -> item.getFlagEnable() == 1).map(Fields::getFields).collect(Collectors.toList()); - fieldsKey.forEach(key -> { - if (request.getParameterMap().keySet().contains(key)) { - request.setAttribute(key, request.getParameterMap().get(key)); - } - }) - - return HandlerInterceptor.super.preHandle(request, response, handler); - } - - @Override - public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { - HandlerInterceptor.super.postHandle(request, response, handler, modelAndView); - } - - @Override - public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { - System.out.println(response.getOutputStream().toString()); - HandlerInterceptor.super.afterCompletion(request, response, handler, ex); - } -} diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/common/interceptor/severlet/CustomParameterFilter.java b/rsf-server/src/main/java/com/vincent/rsf/server/common/interceptor/severlet/CustomParameterFilter.java new file mode 100644 index 0000000..56b1756 --- /dev/null +++ b/rsf-server/src/main/java/com/vincent/rsf/server/common/interceptor/severlet/CustomParameterFilter.java @@ -0,0 +1,37 @@ +package com.vincent.rsf.server.common.interceptor.severlet; + +import org.springframework.stereotype.Component; +import org.springframework.web.filter.OncePerRequestFilter; +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +@Component +public class CustomParameterFilter extends OncePerRequestFilter { + + @Override + protected void doFilterInternal(HttpServletRequest request, + HttpServletResponse response, + FilterChain filterChain) + throws ServletException, IOException { + + ParameterAddableRequest wrappedRequest = new ParameterAddableRequest(request); + // 娣诲姞绯荤粺绾у弬鏁� + wrappedRequest.addParameter("systemVersion", "1.0.0"); + wrappedRequest.addParameter("environment", System.getProperty("spring.profiles.active", "default")); + // 娣诲姞璇锋眰杩借釜淇℃伅 + addTraceInfo(wrappedRequest); + + filterChain.doFilter(wrappedRequest, response); + } + + private void addTraceInfo(ParameterAddableRequest request) { + String traceId = request.getHeader("X-Trace-Id"); +// if (traceId == null || traceId.isEmpty()) { +// traceId = UUID.randomUUID().toString(); +// } + request.addParameter("traceId", "traceId"); + } +} \ No newline at end of file diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/common/interceptor/severlet/DynamicFieldsInterceptor.java b/rsf-server/src/main/java/com/vincent/rsf/server/common/interceptor/severlet/DynamicFieldsInterceptor.java new file mode 100644 index 0000000..ca9ed9a --- /dev/null +++ b/rsf-server/src/main/java/com/vincent/rsf/server/common/interceptor/severlet/DynamicFieldsInterceptor.java @@ -0,0 +1,66 @@ +package com.vincent.rsf.server.common.interceptor.severlet; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.servlet.HandlerInterceptor; +import org.springframework.web.servlet.ModelAndView; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * @author Ryan + * @version 1.0 + * @title DynamicFieldsInterceptor + * @description + * @create 2025/4/16 16:10 + */ +@Slf4j +public class DynamicFieldsInterceptor implements HandlerInterceptor { + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + + +// if (request instanceof ParameterAddableRequest) { +// ParameterAddableRequest wrappedRequest = (ParameterAddableRequest) request; +// +// // 娣诲姞涓氬姟鍙傛暟 +// wrappedRequest.addParameter("processedBy", "CustomParameterInterceptor"); +// +// // 鍙互浠嶴ession鎴栧叾浠栧湴鏂硅幏鍙栨暟鎹� +// Object userId = request.getSession().getAttribute("userId"); +// if (userId != null) { +// wrappedRequest.addParameter("currentUserId", userId.toString()); +// } +// } +// +// return true; + + +// List<Fields> fields = FieldsUtils.getFieldsSta(); +// List<String> fieldsKey = fields.stream().filter(item -> item.getFlagEnable() == 1).map(Fields::getFields).collect(Collectors.toList()); +// fieldsKey.forEach(key -> { +// if (request.getParameterMap().keySet().contains(key)) { +// request.setAttribute(key, request.getParameterMap().get(key)); +// } +// }) +// if (request instanceof ParameterAddableRequest) { +// ParameterAddableRequest wrappedRequest = (ParameterAddableRequest) request; +// wrappedRequest.addParameter("DynamicFields", "springValue"); +// } + +// return true; + return HandlerInterceptor.super.preHandle(request, response, handler); + } + + @Override + public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { + HandlerInterceptor.super.postHandle(request, response, handler, modelAndView); + } + + @Override + public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { + System.out.println(response.getOutputStream().toString()); + HandlerInterceptor.super.afterCompletion(request, response, handler, ex); + } +} diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/common/interceptor/severlet/ParameterAddableRequest.java b/rsf-server/src/main/java/com/vincent/rsf/server/common/interceptor/severlet/ParameterAddableRequest.java new file mode 100644 index 0000000..1283b6a --- /dev/null +++ b/rsf-server/src/main/java/com/vincent/rsf/server/common/interceptor/severlet/ParameterAddableRequest.java @@ -0,0 +1,61 @@ +package com.vincent.rsf.server.common.interceptor.severlet; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletRequestWrapper; +import java.util.*; + +public class ParameterAddableRequest extends HttpServletRequestWrapper { + private final Map<String, String[]> additionalParams = new HashMap<>(); + + public ParameterAddableRequest(HttpServletRequest request) { + super(request); + } + + /** + * 娣诲姞鏂板弬鏁� + * @param name 鍙傛暟鍚� + * @param value 鍙傛暟鍊� + */ + public void addParameter(String name, String value) { + additionalParams.put(name, new String[]{value}); + } + + /** + * 娣诲姞鏂板弬鏁帮紙澶氬�硷級 + * @param name 鍙傛暟鍚� + * @param values 鍙傛暟鍊兼暟缁� + */ + public void addParameter(String name, String[] values) { + additionalParams.put(name, values); + } + + @Override + public String getParameter(String name) { + if (additionalParams.containsKey(name)) { + return additionalParams.get(name)[0]; + } + return super.getParameter(name); + } + + @Override + public Map<String, String[]> getParameterMap() { + Map<String, String[]> combinedMap = new HashMap<>(super.getParameterMap()); + combinedMap.putAll(additionalParams); + return Collections.unmodifiableMap(combinedMap); + } + + @Override + public Enumeration<String> getParameterNames() { + Set<String> names = new HashSet<>(Collections.list(super.getParameterNames())); + names.addAll(additionalParams.keySet()); + return Collections.enumeration(names); + } + + @Override + public String[] getParameterValues(String name) { + if (additionalParams.containsKey(name)) { + return additionalParams.get(name); + } + return super.getParameterValues(name); + } +} \ No newline at end of file diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/common/interceptor/severlet/ParameterAddingFilter.java b/rsf-server/src/main/java/com/vincent/rsf/server/common/interceptor/severlet/ParameterAddingFilter.java new file mode 100644 index 0000000..32f3c6b --- /dev/null +++ b/rsf-server/src/main/java/com/vincent/rsf/server/common/interceptor/severlet/ParameterAddingFilter.java @@ -0,0 +1,52 @@ +package com.vincent.rsf.server.common.interceptor.severlet; + +import javax.servlet.*; +import javax.servlet.annotation.WebFilter; +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; + +@WebFilter("/*") // 鎷︽埅鎵�鏈夎姹� +public class ParameterAddingFilter implements Filter { + + @Override + public void init(FilterConfig filterConfig) throws ServletException { + // 鍒濆鍖栭�昏緫 + } + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) + throws IOException, ServletException { + + if (request instanceof HttpServletRequest) { + // 鍒涘缓鍙慨鏀瑰弬鏁扮殑璇锋眰鍖呰鍣� + ParameterAddableRequest wrappedRequest = + new ParameterAddableRequest((HttpServletRequest) request); + + // 娣诲姞鑷畾涔夊弬鏁� + addCustomParameters(wrappedRequest); + + // 缁х画杩囨护鍣ㄩ摼 + chain.doFilter(wrappedRequest, response); + } else { + chain.doFilter(request, response); + } + } + + private void addCustomParameters(ParameterAddableRequest request) { + // 娣诲姞璇锋眰ID鍜屾椂闂存埑 +// request.addParameter("requestId", UUID.randomUUID().toString()); + request.addParameter("timestamp", String.valueOf(System.currentTimeMillis())); + // 鏍规嵁涓氬姟闇�姹傛坊鍔犲叾浠栧弬鏁� + String userAgent = request.getHeader("User-Agent"); + if (userAgent != null && userAgent.contains("Mobile")) { + request.addParameter("deviceType", "mobile"); + } else { + request.addParameter("deviceType", "desktop"); + } + } + + @Override + public void destroy() { + // 娓呯悊閫昏緫 + } +} \ No newline at end of file diff --git a/rsf-server/src/main/java/order.sql b/rsf-server/src/main/java/order.sql deleted file mode 100644 index b2b71e1..0000000 --- a/rsf-server/src/main/java/order.sql +++ /dev/null @@ -1,27 +0,0 @@ --- save order record --- mysql -insert into `sys_menu` ( `name`, `parent_id`, `route`, `component`, `type`, `sort`, `tenant_id`, `status`) values ( 'menu.order', '0', '/manager/order', 'order', '0' , '0', '1' , '1'); - -insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Query 缁煎悎璁㈠崟绠$悊', '', '1', 'manager:order:list', '0', '1', '1'); -insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Create 缁煎悎璁㈠崟绠$悊', '', '1', 'manager:order:save', '1', '1', '1'); -insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Update 缁煎悎璁㈠崟绠$悊', '', '1', 'manager:order:update', '2', '1', '1'); -insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Delete 缁煎悎璁㈠崟绠$悊', '', '1', 'manager:order:remove', '3', '1', '1'); - --- locale menu name -order: 'Order', - --- locale field -order: { - code: "code", - sourceCode: "sourceCode", - sourceId: "sourceId", - type: "type", - wkType: "wkType", - anfme: "anfme", -}, - --- ResourceContent -import order from './order'; - -case 'order': - return order; diff --git a/rsf-server/src/main/java/orderItem.sql b/rsf-server/src/main/java/orderItem.sql deleted file mode 100644 index caba6ce..0000000 --- a/rsf-server/src/main/java/orderItem.sql +++ /dev/null @@ -1,41 +0,0 @@ --- save orderItem record --- mysql -insert into `sys_menu` ( `name`, `parent_id`, `route`, `component`, `type`, `sort`, `tenant_id`, `status`) values ( 'menu.orderItem', '0', '/manager/orderItem', 'orderItem', '0' , '0', '1' , '1'); - -insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Query 缁煎悎璁㈠崟鏄庣粏绠$悊', '', '1', 'manager:orderItem:list', '0', '1', '1'); -insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Create 缁煎悎璁㈠崟鏄庣粏绠$悊', '', '1', 'manager:orderItem:save', '1', '1', '1'); -insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Update 缁煎悎璁㈠崟鏄庣粏绠$悊', '', '1', 'manager:orderItem:update', '2', '1', '1'); -insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Delete 缁煎悎璁㈠崟鏄庣粏绠$悊', '', '1', 'manager:orderItem:remove', '3', '1', '1'); - --- locale menu name -orderItem: 'OrderItem', - --- locale field -orderItem: { - orderId: "orderId", - orderCode: "orderCode", - sourceItemId: "sourceItemId", - matnrId: "matnrId", - matnrCode: "matnrCode", - maktx: "maktx", - anfme: "anfme", - stockUnit: "stockUnit", - workQty: "workQty", - purQty: "purQty", - purUnit: "purUnit", - qty: "qty", - splrCode: "splrCode", - batch: "batch", - splrBatch: "splrBatch", - splrName: "splrName", - trackCode: "trackCode", - barcode: "barcode", - prodTime: "prodTime", - packName: "packName", -}, - --- ResourceContent -import orderItem from './orderItem'; - -case 'orderItem': - return orderItem; diff --git a/rsf-server/src/main/java/stockItem.sql b/rsf-server/src/main/java/stockItem.sql deleted file mode 100644 index 306ee63..0000000 --- a/rsf-server/src/main/java/stockItem.sql +++ /dev/null @@ -1,41 +0,0 @@ --- save stockItem record --- mysql -insert into `sys_menu` ( `name`, `parent_id`, `route`, `component`, `type`, `sort`, `tenant_id`, `status`) values ( 'menu.stockItem', '0', '/manager/stockItem', 'stockItem', '0' , '0', '1' , '1'); - -insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Query 缁煎悎鍗曟嵁鏄庣粏', '', '1', 'manager:stockItem:list', '0', '1', '1'); -insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Create 缁煎悎鍗曟嵁鏄庣粏', '', '1', 'manager:stockItem:save', '1', '1', '1'); -insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Update 缁煎悎鍗曟嵁鏄庣粏', '', '1', 'manager:stockItem:update', '2', '1', '1'); -insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Delete 缁煎悎鍗曟嵁鏄庣粏', '', '1', 'manager:stockItem:remove', '3', '1', '1'); - --- locale menu name -stockItem: 'StockItem', - --- locale field -stockItem: { - stockId: "stockId", - stockCode: "stockCode", - sourceItemId: "sourceItemId", - matnrId: "matnrId", - matnrCode: "matnrCode", - maktx: "maktx", - anfme: "anfme", - stockUnit: "stockUnit", - workQty: "workQty", - purQty: "purQty", - purUnit: "purUnit", - qty: "qty", - splrCode: "splrCode", - batch: "batch", - splrBatch: "splrBatch", - splrName: "splrName", - trackCode: "trackCode", - barcode: "barcode", - prodTime: "prodTime", - packName: "packName", -}, - --- ResourceContent -import stockItem from './stockItem'; - -case 'stockItem': - return stockItem; diff --git a/rsf-server/src/main/java/wave.sql b/rsf-server/src/main/java/wave.sql deleted file mode 100644 index 4fcff71..0000000 --- a/rsf-server/src/main/java/wave.sql +++ /dev/null @@ -1,27 +0,0 @@ --- save wave record --- mysql -insert into `sys_menu` ( `name`, `parent_id`, `route`, `component`, `type`, `sort`, `tenant_id`, `status`) values ( 'menu.wave', '0', '/manager/wave', 'wave', '0' , '0', '1' , '1'); - -insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Query 娉㈡鍗曟嵁', '', '1', 'manager:wave:list', '0', '1', '1'); -insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Create 娉㈡鍗曟嵁', '', '1', 'manager:wave:save', '1', '1', '1'); -insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Update 娉㈡鍗曟嵁', '', '1', 'manager:wave:update', '2', '1', '1'); -insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Delete 娉㈡鍗曟嵁', '', '1', 'manager:wave:remove', '3', '1', '1'); - --- locale menu name -wave: 'Wave', - --- locale field -wave: { - code: "code", - type: "type", - exceStatus: "exceStatus", - anfme: "anfme", - qty: "qty", - orderNum: "orderNum", -}, - --- ResourceContent -import wave from './wave'; - -case 'wave': - return wave; diff --git a/rsf-server/src/main/java/waveItem.sql b/rsf-server/src/main/java/waveItem.sql deleted file mode 100644 index 48f35e9..0000000 --- a/rsf-server/src/main/java/waveItem.sql +++ /dev/null @@ -1,35 +0,0 @@ --- save waveItem record --- mysql -insert into `sys_menu` ( `name`, `parent_id`, `route`, `component`, `type`, `sort`, `tenant_id`, `status`) values ( 'menu.waveItem', '0', '/manager/waveItem', 'waveItem', '0' , '0', '1' , '1'); - -insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Query 娉㈡鏄庣粏', '', '1', 'manager:waveItem:list', '0', '1', '1'); -insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Create 娉㈡鏄庣粏', '', '1', 'manager:waveItem:save', '1', '1', '1'); -insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Update 娉㈡鏄庣粏', '', '1', 'manager:waveItem:update', '2', '1', '1'); -insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Delete 娉㈡鏄庣粏', '', '1', 'manager:waveItem:remove', '3', '1', '1'); - --- locale menu name -waveItem: 'WaveItem', - --- locale field -waveItem: { - waveId: "waveId", - waveCode: "waveCode", - matnrId: "matnrId", - matnrName: "matnrName", - matnrCode: "matnrCode", - batch: "batch", - splrBatch: "splrBatch", - orderCode: "orderCode", - orderItemId: "orderItemId", - unit: "unit", - trackCode: "trackCode", - fieldsIndex: "fieldsIndex", - anfme: "anfme", - workQty: "workQty", -}, - --- ResourceContent -import waveItem from './waveItem'; - -case 'waveItem': - return waveItem; -- Gitblit v1.9.1