fanxw 2 lat temu
rodzic
commit
3dd80e00eb

+ 1 - 1
src/main/java/com/chinaitop/depot/DatePermissionInterceptor.java

@@ -75,7 +75,7 @@ public class DatePermissionInterceptor implements Interceptor {
75 75
 			if(threadLocalObj != null) {
76 76
 				orgId = ObjectUtils.toString(threadLocalObj);
77 77
 			}
78
-			if(orgId!=null) {
78
+			if(orgId!=null && !"10".equals(orgId)) {
79 79
 				//机构单独查询时使用递归查询,可以查询机构下级机构
80 80
 				if("com.chinaitop.depot.system.mapper.OrgInfoMapper.selectByExample".equals(mappedStatement.getId())) {
81 81
 					/*bouString = bouString.replaceAll("org_info", "(SELECT * from org_info"

+ 16 - 3
src/main/java/com/chinaitop/depot/utils/CustomFilter.java

@@ -12,6 +12,9 @@ import javax.servlet.http.HttpServletRequest;
12 12
 import javax.servlet.http.HttpSession;
13 13
 
14 14
 import org.apache.commons.lang.ObjectUtils;
15
+import org.apache.commons.lang3.StringUtils;
16
+
17
+import com.chinaitop.depot.utils.ParameterRequestWrapper;
15 18
 
16 19
 public class CustomFilter implements Filter {
17 20
 
@@ -19,20 +22,30 @@ public class CustomFilter implements Filter {
19 22
     public void init(FilterConfig filterConfig) throws ServletException {
20 23
  
21 24
     }
22
-	
25
+
23 26
 	@Override
24 27
 	public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
25 28
 			throws IOException, ServletException {
29
+		ParameterRequestWrapper requestWrapper = new ParameterRequestWrapper((HttpServletRequest) arg0);
26 30
 		HttpServletRequest request = (HttpServletRequest) arg0;
27 31
 		HttpSession session = request.getSession();
28 32
 		String orgId = "";
29 33
 		if (session != null){
30 34
 			orgId = ObjectUtils.toString(session.getAttribute("orgId"),"");
31 35
 		}
32
-		if (!orgId.isEmpty()) {
36
+		if (StringUtils.isNotBlank(orgId)) {
33 37
 			DataPolicyEngine.set(orgId);
38
+			// 将参数追加到request url 之后
39
+			requestWrapper.addParameter("orgId", orgId);
40
+			requestWrapper.addParameter("unitid", orgId);
41
+			requestWrapper.addParameter("unitId", orgId);
42
+			// 将参数追加到request 的body 中
43
+			requestWrapper.addParameterToBody("orgId", orgId);
44
+			requestWrapper.addParameterToBody("unitid", orgId);
45
+			requestWrapper.addParameterToBody("unitId", orgId);
34 46
 		}
35
-		arg2.doFilter(arg0, arg1);
47
+
48
+		arg2.doFilter(requestWrapper, arg1);
36 49
 		DataPolicyEngine.remove();
37 50
 	}
38 51
 	

+ 203 - 0
src/main/java/com/chinaitop/depot/utils/ParameterRequestWrapper.java

@@ -0,0 +1,203 @@
1
+package com.chinaitop.depot.utils;
2
+
3
+import com.alibaba.fastjson.JSONObject;
4
+import org.springframework.util.StringUtils;
5
+
6
+import javax.servlet.ReadListener;
7
+import javax.servlet.ServletInputStream;
8
+import javax.servlet.http.HttpServletRequest;
9
+import javax.servlet.http.HttpServletRequestWrapper;
10
+import java.io.BufferedReader;
11
+import java.io.ByteArrayInputStream;
12
+import java.io.IOException;
13
+import java.io.InputStreamReader;
14
+import java.util.HashMap;
15
+import java.util.Map;
16
+
17
+/**
18
+ * request 请求参数添加
19
+ *
20
+ * @Description TODO
21
+ * @Date 2022/12/13 09:41
22
+ * @Author fxw
23
+ * @Version 1.0
24
+ */
25
+public class ParameterRequestWrapper extends HttpServletRequestWrapper {
26
+
27
+    private Map<String, String[]> params = new HashMap<String, String[]>();
28
+    private byte[] body;
29
+
30
+    public ParameterRequestWrapper(HttpServletRequest request) {
31
+        // 将request交给父类,以便于调用对应方法的时候,将其输出,
32
+        // 其实父亲类的实现方式和第一种new的方式类似
33
+        super(request);
34
+        //将参数表,赋予给当前的Map以便于持有request中的参数
35
+        //由于request并没有提供现成的获取json字符串的方法,所以我们需要将body中的流转为字符串
36
+        String json = getPostData(request);
37
+        if (!StringUtils.isEmpty(json)) {
38
+            // body 赋值
39
+            this.body = getData(json).getBytes();
40
+        }
41
+        // 请求参数赋值
42
+        this.params.putAll(request.getParameterMap());
43
+    }
44
+
45
+    /**
46
+     * 重载一个构造方法-- 扩展参数
47
+     *
48
+     * @param request
49
+     * @param extendParams
50
+     */
51
+    public ParameterRequestWrapper(HttpServletRequest request, Map<String, Object> extendParams) {
52
+        this(request);
53
+        //这里将扩展参数写入参数表
54
+        addAllParameters(extendParams);
55
+    }
56
+
57
+    /**
58
+     * 增加多个参数
59
+     *
60
+     * @param otherParams
61
+     */
62
+    public void addAllParameters(Map<String, Object> otherParams) {
63
+        for (Map.Entry<String, Object> entry : otherParams.entrySet()) {
64
+            addParameter(entry.getKey(), entry.getValue());
65
+        }
66
+    }
67
+
68
+    /**
69
+     * 增加参数
70
+     */
71
+    public void addParameter(String name, Object value) {
72
+        if (value != null) {
73
+            if (value instanceof String[]) {
74
+                params.put(name, (String[]) value);
75
+            } else if (value instanceof String) {
76
+                params.put(name, new String[]{(String) value});
77
+            } else {
78
+                params.put(name, new String[]{String.valueOf(value)});
79
+            }
80
+        }
81
+    }
82
+
83
+    /**
84
+     * 增加body 参数
85
+     *
86
+     * @param name
87
+     * @param value
88
+     */
89
+    public void addParameterToBody(String name, Object value) {
90
+        byte[] json = this.body;
91
+        if (null == json) {
92
+            return;
93
+        }
94
+        String jsonStr = new String(json);
95
+        try {
96
+            Map<String, Object> mapData = JSONObject.parseObject(jsonStr, Map.class);
97
+            if (value != null) {
98
+                mapData.put(name, value);
99
+                this.body = JSONObject.toJSONString(mapData).getBytes();
100
+            }
101
+        } catch (Exception ex) {
102
+            // 转换异常
103
+        }
104
+
105
+    }
106
+
107
+
108
+    /**
109
+     * body中参数解密
110
+     *
111
+     * @param json
112
+     * @return
113
+     */
114
+    private String getData(String json) {
115
+        //加密,如果传过来的是加密数据,先解密,未加密直接返回原json
116
+//        if(StringUtils.isNotEmpty(json)){
117
+//            json = AES256Util.decode(json);
118
+//            if(StringUtils.isEmpty(json)){
119
+//                return "";
120
+//            }
121
+//            JSONObject object = JSONUtil.parseObj(json);
122
+//            return JSONUtil.toJsonStr(object);
123
+//        }
124
+        //不加密
125
+        return json;
126
+
127
+    }
128
+
129
+    /**
130
+     * 获取body 参数
131
+     *
132
+     * @param request
133
+     * @return
134
+     */
135
+    public static String getPostData(HttpServletRequest request) {
136
+        StringBuilder data = new StringBuilder();
137
+        String line;
138
+        BufferedReader reader;
139
+        try {
140
+            reader = request.getReader();
141
+            while (null != (line = reader.readLine())) {
142
+                data.append(line);
143
+            }
144
+        } catch (IOException e) {
145
+            return null;
146
+        }
147
+        return data.toString();
148
+    }
149
+
150
+    @Override
151
+    public String getParameter(String name) {//重写getParameter,代表参数从当前类中的map获取
152
+        String[] values = params.get(name);
153
+        if (values == null || values.length == 0) {
154
+            return null;
155
+        }
156
+        return values[0];
157
+    }
158
+
159
+    @Override
160
+    public String[] getParameterValues(String name) {//同上
161
+        return params.get(name);
162
+    }
163
+
164
+    @Override
165
+    public BufferedReader getReader() throws IOException {
166
+        return new BufferedReader(new InputStreamReader(getInputStream()));
167
+    }
168
+
169
+    /**
170
+     * 在使用@RequestBody注解的时候,其实框架是调用了getInputStream()方法,所以我们要重写这个方法
171
+     *
172
+     * @return
173
+     * @throws IOException
174
+     */
175
+    @Override
176
+    public ServletInputStream getInputStream() throws IOException {
177
+        if (body == null) {
178
+            body = new byte[0];
179
+        }
180
+        final ByteArrayInputStream bais = new ByteArrayInputStream(body);
181
+        return new ServletInputStream() {
182
+            @Override
183
+            public boolean isFinished() {
184
+                return false;
185
+            }
186
+
187
+            @Override
188
+            public boolean isReady() {
189
+                return false;
190
+            }
191
+
192
+            @Override
193
+            public void setReadListener(ReadListener readListener) {
194
+
195
+            }
196
+
197
+            @Override
198
+            public int read() throws IOException {
199
+                return bais.read();
200
+            }
201
+        };
202
+    }
203
+}