|
14 | 14 |
|
15 | 15 | package apijson.boot;
|
16 | 16 |
|
| 17 | +import apijson.JSON; |
17 | 18 | import apijson.fastjson2.APIJSONApplication;
|
18 | 19 | import apijson.fastjson2.APIJSONCreator;
|
19 | 20 | import apijson.fastjson2.APIJSONVerifier;
|
20 | 21 | import apijson.fastjson2.APIJSONSQLConfig;
|
21 | 22 | import apijson.orm.AbstractParser;
|
22 | 23 | import apijson.orm.AbstractVerifier;
|
| 24 | +import com.alibaba.fastjson.JSONObject; |
| 25 | +import com.alibaba.fastjson.serializer.PropertyFilter; |
23 | 26 | import org.springframework.boot.SpringApplication;
|
24 | 27 | import org.springframework.boot.autoconfigure.SpringBootApplication;
|
25 | 28 | import org.springframework.boot.web.server.WebServerFactoryCustomizer;
|
|
30 | 33 | import org.springframework.web.servlet.config.annotation.CorsRegistry;
|
31 | 34 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
32 | 35 |
|
| 36 | +import java.lang.reflect.Modifier; |
| 37 | +import java.util.List; |
33 | 38 | import java.util.Map;
|
34 | 39 | import java.util.regex.Pattern;
|
35 | 40 |
|
|
43 | 48 | import apijson.demo.DemoSQLConfig;
|
44 | 49 | import apijson.demo.DemoSQLExecutor;
|
45 | 50 | import apijson.demo.DemoVerifier;
|
46 |
| -import apijson.orm.Verifier; |
47 |
| -//import unitauto.MethodUtil; |
48 |
| -//import unitauto.MethodUtil.Argument; |
49 |
| -//import unitauto.MethodUtil.InstanceGetter; |
50 |
| -//import unitauto.MethodUtil.JSONCallback; |
51 |
| -//import unitauto.jar.UnitAutoApp; |
| 51 | +import unitauto.MethodUtil; |
| 52 | +import unitauto.MethodUtil.Argument; |
| 53 | +import unitauto.MethodUtil.InstanceGetter; |
| 54 | +import unitauto.MethodUtil.JSONCallback; |
| 55 | +import unitauto.jar.UnitAutoApp; |
52 | 56 |
|
53 | 57 |
|
54 | 58 | /**
|
@@ -265,96 +269,96 @@ public DemoSQLExecutor createSQLExecutor() {
|
265 | 269 |
|
266 | 270 | // UnitAuto 单元测试配置 https://github.com/TommyLemon/UnitAuto <<<<<<<<<<<<<<<<<<<<<<<<<<<
|
267 | 271 | // FIXME 不要开放给项目组后端之外的任何人使用 UnitAuto(强制登录鉴权)!!!如果不需要单元测试则移除相关代码或 unitauto.Log.DEBUG = false;
|
268 |
| - //UnitAutoApp.init(); |
| 272 | + UnitAutoApp.init(); |
269 | 273 |
|
270 | 274 | // 适配 Spring 注入的类及 Context 等环境相关的类
|
271 |
| - //final InstanceGetter ig = MethodUtil.INSTANCE_GETTER; |
272 |
| - //MethodUtil.INSTANCE_GETTER = new InstanceGetter() { |
273 |
| - // |
274 |
| - // @Override |
275 |
| - // public Object getInstance(@NotNull Class<?> clazz, List<Argument> classArgs, Boolean reuse) throws Exception { |
276 |
| - // if (APPLICATION_CONTEXT != null && ApplicationContext.class.isAssignableFrom(clazz) && clazz.isAssignableFrom(APPLICATION_CONTEXT.getClass())) { |
277 |
| - // return APPLICATION_CONTEXT; |
278 |
| - // } |
279 |
| - // |
280 |
| - // if (reuse != null && reuse && (classArgs == null || classArgs.isEmpty())) { |
281 |
| - // return APPLICATION_CONTEXT.getBean(clazz); |
282 |
| - // } |
283 |
| - // |
284 |
| - // return ig.getInstance(clazz, classArgs, reuse); |
285 |
| - // } |
286 |
| - //}; |
287 |
| - // |
288 |
| - //// 排除转换 JSON 异常的类,一般是 Context 等环境相关的类 |
289 |
| - //final JSONCallback jc = MethodUtil.JSON_CALLBACK; |
290 |
| - //MethodUtil.JSON_CALLBACK = new JSONCallback() { |
291 |
| - // |
292 |
| - // @Override |
293 |
| - // public JSONObject newSuccessResult() { |
294 |
| - // return jc.newSuccessResult(); |
295 |
| - // } |
296 |
| - // |
297 |
| - // @Override |
298 |
| - // public JSONObject newErrorResult(Throwable e) { |
299 |
| - // return jc.newErrorResult(e); |
300 |
| - // } |
301 |
| - // |
302 |
| - // @Override |
303 |
| - // public JSONObject parseJSON(String type, Object value) { |
304 |
| - // if (value == null || unitauto.JSON.isBooleanOrNumberOrString(value) || value instanceof JSON || value instanceof Enum) { |
305 |
| - // return jc.parseJSON(type, value); |
306 |
| - // } |
307 |
| - // |
308 |
| - // if (value instanceof ApplicationContext |
309 |
| - // || value instanceof Context |
310 |
| - // || value instanceof org.apache.catalina.Context |
311 |
| - // // SpringBoot 2.6.7 已移除 || value instanceof ch.qos.logback.core.Context |
312 |
| - // ) { |
313 |
| - // value = value.toString(); |
314 |
| - // } else { |
315 |
| - // try { |
316 |
| - // value = parseJSON(JSON.toJSONString(value, new PropertyFilter() { |
317 |
| - // @Override |
318 |
| - // public boolean apply(Object object, String name, Object value) { |
319 |
| - // if (value == null) { |
320 |
| - // return true; |
321 |
| - // } |
322 |
| - // |
323 |
| - // if (value instanceof ApplicationContext |
324 |
| - // || value instanceof Context |
325 |
| - // || value instanceof org.apache.catalina.Context |
326 |
| - // // SpringBoot 2.6.7 已移除 || value instanceof ch.qos.logback.core.Context |
327 |
| - // ) { |
328 |
| - // return false; |
329 |
| - // } |
330 |
| - // |
331 |
| - // // 防止通过 UnitAuto 远程执行 getDBPassword 等方法来查到敏感信息,但如果直接调用 public String getDBUri 这里没法拦截,仍然会返回敏感信息 |
332 |
| - // // if (object instanceof SQLConfig) { |
333 |
| - // // // 这个类部分方法不序列化返回 |
334 |
| - // // if ("dBUri".equalsIgnoreCase(name) || "dBPassword".equalsIgnoreCase(name) || "dBAccount".equalsIgnoreCase(name)) { |
335 |
| - // // return false; |
336 |
| - // // } |
337 |
| - // // return false; // 这个类所有方法都不序列化返回 |
338 |
| - // // } |
339 |
| - // |
340 |
| - // // 所有类中的方法只要包含关键词就不序列化返回 |
341 |
| - // String n = StringUtil.toLowerCase(name); |
342 |
| - // if (n.contains("database") || n.contains("schema") || n.contains("dburi") || n.contains("password") || n.contains("account")) { |
343 |
| - // return false; |
344 |
| - // } |
345 |
| - // |
346 |
| - // return Modifier.isPublic(value.getClass().getModifiers()); |
347 |
| - // } |
348 |
| - // })); |
349 |
| - // } catch (Exception e) { |
350 |
| - // Log.e(TAG, "toJSONString catch \n" + e.getMessage()); |
351 |
| - // } |
352 |
| - // } |
353 |
| - // |
354 |
| - // return jc.parseJSON(type, value); |
355 |
| - // } |
356 |
| - // |
357 |
| - //}; |
| 275 | + final InstanceGetter ig = MethodUtil.INSTANCE_GETTER; |
| 276 | + MethodUtil.INSTANCE_GETTER = new InstanceGetter() { |
| 277 | + |
| 278 | + @Override |
| 279 | + public Object getInstance(@NotNull Class<?> clazz, List<Argument> classArgs, Boolean reuse) throws Exception { |
| 280 | + if (APPLICATION_CONTEXT != null && ApplicationContext.class.isAssignableFrom(clazz) && clazz.isAssignableFrom(APPLICATION_CONTEXT.getClass())) { |
| 281 | + return APPLICATION_CONTEXT; |
| 282 | + } |
| 283 | + |
| 284 | + if (reuse != null && reuse && (classArgs == null || classArgs.isEmpty())) { |
| 285 | + return APPLICATION_CONTEXT.getBean(clazz); |
| 286 | + } |
| 287 | + |
| 288 | + return ig.getInstance(clazz, classArgs, reuse); |
| 289 | + } |
| 290 | + }; |
| 291 | + |
| 292 | + // 排除转换 JSON 异常的类,一般是 Context 等环境相关的类 |
| 293 | + final JSONCallback jc = MethodUtil.JSON_CALLBACK; |
| 294 | + MethodUtil.JSON_CALLBACK = new JSONCallback() { |
| 295 | + |
| 296 | + @Override |
| 297 | + public JSONObject newSuccessResult() { |
| 298 | + return jc.newSuccessResult(); |
| 299 | + } |
| 300 | + |
| 301 | + @Override |
| 302 | + public JSONObject newErrorResult(Throwable e) { |
| 303 | + return jc.newErrorResult(e); |
| 304 | + } |
| 305 | + |
| 306 | + @Override |
| 307 | + public JSONObject parseJSON(String type, Object value) { |
| 308 | + if (value == null || unitauto.JSON.isBooleanOrNumberOrString(value) || value instanceof JSON || value instanceof Enum) { |
| 309 | + return jc.parseJSON(type, value); |
| 310 | + } |
| 311 | + |
| 312 | + if (value instanceof ApplicationContext |
| 313 | + || value instanceof Context |
| 314 | + || value instanceof org.apache.catalina.Context |
| 315 | + // SpringBoot 2.6.7 已移除 || value instanceof ch.qos.logback.core.Context |
| 316 | + ) { |
| 317 | + value = value.toString(); |
| 318 | + } else { |
| 319 | + try { |
| 320 | + value = com.alibaba.fastjson.JSON.parse(com.alibaba.fastjson.JSON.toJSONString(value, new PropertyFilter() { |
| 321 | + @Override |
| 322 | + public boolean apply(Object object, String name, Object value) { |
| 323 | + if (value == null) { |
| 324 | + return true; |
| 325 | + } |
| 326 | + |
| 327 | + if (value instanceof ApplicationContext |
| 328 | + || value instanceof Context |
| 329 | + || value instanceof org.apache.catalina.Context |
| 330 | + // SpringBoot 2.6.7 已移除 || value instanceof ch.qos.logback.core.Context |
| 331 | + ) { |
| 332 | + return false; |
| 333 | + } |
| 334 | + |
| 335 | + // 防止通过 UnitAuto 远程执行 getDBPassword 等方法来查到敏感信息,但如果直接调用 public String getDBUri 这里没法拦截,仍然会返回敏感信息 |
| 336 | + // if (object instanceof SQLConfig) { |
| 337 | + // // 这个类部分方法不序列化返回 |
| 338 | + // if ("dBUri".equalsIgnoreCase(name) || "dBPassword".equalsIgnoreCase(name) || "dBAccount".equalsIgnoreCase(name)) { |
| 339 | + // return false; |
| 340 | + // } |
| 341 | + // return false; // 这个类所有方法都不序列化返回 |
| 342 | + // } |
| 343 | + |
| 344 | + // 所有类中的方法只要包含关键词就不序列化返回 |
| 345 | + String n = StringUtil.toLowerCase(name); |
| 346 | + if (n.contains("database") || n.contains("schema") || n.contains("dburi") || n.contains("password") || n.contains("account")) { |
| 347 | + return false; |
| 348 | + } |
| 349 | + |
| 350 | + return Modifier.isPublic(value.getClass().getModifiers()); |
| 351 | + } |
| 352 | + })); |
| 353 | + } catch (Exception e) { |
| 354 | + Log.e(TAG, "toJSONString catch \n" + e.getMessage()); |
| 355 | + } |
| 356 | + } |
| 357 | + |
| 358 | + return jc.parseJSON(type, value); |
| 359 | + } |
| 360 | + |
| 361 | + }; |
358 | 362 |
|
359 | 363 | // UnitAuto 单元测试配置 https://github.com/TommyLemon/UnitAuto >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
360 | 364 |
|
|
0 commit comments