Skip to content

Commit 6981d3a

Browse files
committed
优化角色权限、参数校验、远程函数的初始化;升级 UnitAuto 至 2.7.2;升级自身版本为 5.0.5
1 parent 8b05e68 commit 6981d3a

File tree

7 files changed

+81
-60
lines changed

7 files changed

+81
-60
lines changed

LICENSE

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@
186186
same "printed page" as the copyright notice for easier
187187
identification within third-party archives.
188188

189-
Copyright [yyyy] [name of copyright owner]
189+
Copyright ©2020 APIJSON
190190

191191
Licensed under the Apache License, Version 2.0 (the "License");
192192
you may not use this file except in compliance with the License.

pom.xml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
<groupId>apijson.framework</groupId>
77
<artifactId>apijson-framework</artifactId>
8-
<version>5.0.0</version>
8+
<version>5.0.5</version>
99
<packaging>jar</packaging>
1010

1111
<name>APIJSONFramework</name>
@@ -31,11 +31,11 @@
3131
</dependency>
3232

3333
<!-- 可使用 libs 目录的 apijson-orm.jar 来替代,两种方式二选一 -->
34-
<dependency>
34+
<!-- <dependency>
3535
<groupId>com.github.Tencent</groupId>
3636
<artifactId>APIJSON</artifactId>
3737
<version>5.0.0</version>
38-
</dependency>
38+
</dependency> -->
3939

4040
<!-- 数据库 JDBC 驱动 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< -->
4141
<dependency>
@@ -55,12 +55,12 @@
5555
<dependency>
5656
<groupId>com.github.TommyLemon</groupId>
5757
<artifactId>unitauto-java</artifactId>
58-
<version>2.6.4</version>
58+
<version>2.7.2</version>
5959
</dependency>
6060
<dependency>
6161
<groupId>com.github.TommyLemon</groupId>
6262
<artifactId>unitauto-jar</artifactId>
63-
<version>2.6.4</version>
63+
<version>2.7.2</version>
6464
</dependency>
6565
<!-- 单元测试:可使用 libs 目录的 unitauto-java.jar 和 unitauto-jar.jar 来替代,两种方式二选一 >>>>>>>>> -->
6666

src/main/java/apijson/framework/APIJSONApplication.java

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
import apijson.NotNull;
2121

2222

23-
/**SpringBootApplication
23+
/**启动入口 Application
2424
* 右键这个类 > Run As > Java Application
2525
* @author Lemon
2626
*/
@@ -73,77 +73,80 @@ public static void init(boolean shutdownWhenServerError, @NotNull APIJSONCreator
7373
APIJSONController.APIJSON_CREATOR = creator;
7474

7575

76-
System.out.println("\n\n\n开始初始化: 权限校验配置 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n");
76+
System.out.println("\n\n\n开始初始化: Access 权限校验配置 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n");
7777
try {
7878
APIJSONVerifier.initAccess(shutdownWhenServerError, creator);
7979
}
8080
catch (Throwable e) {
8181
e.printStackTrace();
8282
if (shutdownWhenServerError) {
83-
onServerError("权限校验配置 初始化失败!", shutdownWhenServerError);
83+
onServerError("权Access 限校验配置 初始化失败!", shutdownWhenServerError);
8484
}
8585
}
86-
System.out.println("\n完成初始化: 权限校验配置 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
86+
System.out.println("\n完成初始化: Access 权限校验配置 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
8787

8888

8989

90-
System.out.println("\n\n\n开始初始化: 远程函数配置 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n");
90+
System.out.println("\n\n\n开始初始化: Function 远程函数配置 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n");
9191
try {
9292
APIJSONFunctionParser.init(shutdownWhenServerError, creator);
9393
}
9494
catch (Throwable e) {
9595
e.printStackTrace();
9696
if (shutdownWhenServerError) {
97-
onServerError("远程函数配置 初始化失败!", shutdownWhenServerError);
97+
onServerError("Function 远程函数配置 初始化失败!", shutdownWhenServerError);
9898
}
9999
}
100-
System.out.println("\n完成初始化: 远程函数配置 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
100+
System.out.println("\n完成初始化: Function 远程函数配置 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
101101

102-
System.out.println("开始测试: 远程函数 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n");
102+
System.out.println("开始测试: Function 远程函数 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n");
103103
try {
104104
APIJSONFunctionParser.test();
105105
}
106106
catch (Throwable e) {
107107
e.printStackTrace();
108108
if (shutdownWhenServerError) {
109-
onServerError("远程函数配置 测试失败!", shutdownWhenServerError);
109+
onServerError("Function 远程函数配置 测试失败!", shutdownWhenServerError);
110110
}
111111
}
112-
System.out.println("\n完成测试: 远程函数 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
112+
System.out.println("\n完成测试: Function 远程函数 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
113113

114114

115115

116-
System.out.println("\n\n\n开始初始化: 请求结构校验配置 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n");
116+
System.out.println("\n\n\n开始初始化: Request 请求参数校验配置 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n");
117117
try {
118118
APIJSONVerifier.initRequest(shutdownWhenServerError, creator);
119119
}
120120
catch (Throwable e) {
121121
e.printStackTrace();
122122
if (shutdownWhenServerError) {
123-
onServerError("请求结构校验配置 初始化失败!", shutdownWhenServerError);
123+
onServerError("Request 请求参数校验配置 初始化失败!", shutdownWhenServerError);
124124
}
125125
}
126-
System.out.println("\n完成初始化: 请求结构校验配置 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
126+
System.out.println("\n完成初始化: Request 请求参数校验校验配置 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
127127

128-
System.out.println("\n\n\n开始测试: Request 和 Response 的数据结构校验 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n");
128+
System.out.println("\n\n\n开始测试: Request 请求参数校验 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n");
129129
try {
130130
APIJSONVerifier.testStructure();
131131
}
132132
catch (Throwable e) {
133133
e.printStackTrace();
134134
if (shutdownWhenServerError) {
135-
onServerError("Request 和 Response 的数据结构校验 测试失败!", shutdownWhenServerError);
135+
onServerError("Request 请求参数校验 测试失败!", shutdownWhenServerError);
136136
}
137137
}
138-
System.out.println("\n完成测试: Request 和 Response 的数据结构校验 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
138+
System.out.println("\n完成测试: Request 请求参数校验 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
139139

140140

141141

142142

143-
System.out.println("\n\n<<<<<<<<<<<<<<<<<<<<<<<<< APIJSON 启动完成,试试调用自动化 API 吧 ^_^ >>>>>>>>>>>>>>>>>>>>>>>>\n");
143+
System.out.println("官方网站: http://apijson.cn");
144+
System.out.println("设计规范: https://github.com/Tencent/APIJSON/blob/master/Document.md#3");
145+
System.out.println("测试链接: http://apijson.cn/api?type=JSON&url=http://localhos:8080/get");
146+
System.out.println("\n\n<<<<<<<<<<<<<<<<<<<<<<<<< APIJSON 启动完成,试试调用零代码万能通用 API 吧 ^_^ >>>>>>>>>>>>>>>>>>>>>>>>\n");
144147
}
145148

146-
private static void onServerError(String msg, boolean shutdown) throws ServerException {
149+
protected static void onServerError(String msg, boolean shutdown) throws ServerException {
147150
Log.e(TAG, "\n启动时自检测试未通过!原因:\n" + msg);
148151

149152
if (shutdown) {

src/main/java/apijson/framework/APIJSONConstant.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@
1414

1515
package apijson.framework;
1616

17+
import java.util.Arrays;
18+
import java.util.List;
19+
1720
import apijson.JSONResponse;
1821
import apijson.orm.JSONRequest;
1922
import apijson.orm.Visitor;
@@ -66,6 +69,8 @@ public class APIJSONConstant {
6669
public static final String TEST_RECORD_;
6770

6871
public static final String VISITOR_;
72+
73+
public static final List<String> METHODS;
6974

7075
static {
7176
ACCESS_ = Access.class.getSimpleName();
@@ -82,8 +87,8 @@ public class APIJSONConstant {
8287
TEST_RECORD_ = TestRecord.class.getSimpleName();
8388

8489
VISITOR_ = Visitor.class.getSimpleName();
90+
91+
METHODS = Arrays.asList("get", "head", "gets", "heads", "post", "put", "delete");
8592
}
86-
87-
8893

8994
}

src/main/java/apijson/framework/APIJSONController.java

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import static apijson.RequestMethod.POST;
2323
import static apijson.RequestMethod.PUT;
2424
import static apijson.framework.APIJSONConstant.ACCESS_;
25+
import static apijson.framework.APIJSONConstant.METHODS;
2526
import static apijson.framework.APIJSONConstant.DEFAULTS;
2627
import static apijson.framework.APIJSONConstant.FORMAT;
2728
import static apijson.framework.APIJSONConstant.FUNCTION_;
@@ -32,8 +33,6 @@
3233

3334
import java.lang.reflect.Method;
3435
import java.rmi.ServerException;
35-
import java.util.Arrays;
36-
import java.util.List;
3736
import java.util.Map;
3837

3938
import javax.servlet.AsyncContext;
@@ -67,10 +66,8 @@ public class APIJSONController {
6766

6867
@NotNull
6968
public static APIJSONCreator APIJSON_CREATOR;
70-
public static List<String> APIJSON_METHODS;
7169
static {
7270
APIJSON_CREATOR = new APIJSONCreator();
73-
APIJSON_METHODS = Arrays.asList("get", "head", "gets", "heads", "post", "put", "delete");
7471
}
7572

7673
public String getRequestURL() {
@@ -118,12 +115,12 @@ public String parseByTag(RequestMethod method, String tag, Map<String, String> p
118115
* @return
119116
*/
120117
public String crud(String method, String request, HttpSession session) {
121-
if (APIJSON_METHODS.contains(method)) {
118+
if (METHODS.contains(method)) {
122119
return parse(RequestMethod.valueOf(method.toUpperCase()), request, session);
123120
}
124121

125122
return APIJSONParser.newErrorResult(new IllegalArgumentException("URL 路径 /{method} 中 method 值 " + method
126-
+ " 错误!只允许 " + APIJSON_METHODS + " 中的一个!")).toJSONString();
123+
+ " 错误!只允许 " + METHODS + " 中的一个!")).toJSONString();
127124
}
128125

129126
/**获取
@@ -211,12 +208,12 @@ public String delete(String request, HttpSession session) {
211208
* @return
212209
*/
213210
public String crudByTag(String method, String tag, Map<String, String> params, String request, HttpSession session) {
214-
if (APIJSON_METHODS.contains(method)) {
211+
if (METHODS.contains(method)) {
215212
return parseByTag(RequestMethod.valueOf(method.toUpperCase()), tag, params, request, session);
216213
}
217214

218215
return APIJSONParser.newErrorResult(new IllegalArgumentException("URL 路径 /{method}/{tag} 中 method 值 " + method
219-
+ " 错误!只允许 " + APIJSON_METHODS + " 中的一个!")).toJSONString();
216+
+ " 错误!只允许 " + METHODS + " 中的一个!")).toJSONString();
220217
}
221218

222219

@@ -402,7 +399,7 @@ public void invokeMethod(String request, HttpServletRequest servletRequest) {
402399
public void complete(JSONObject data, Method method, InterfaceProxy proxy, Object... extras) throws Exception {
403400

404401
ServletResponse servletResponse = called[0] ? null : asyncContext.getResponse();
405-
if (servletResponse == null || servletResponse.isCommitted()) { // isCommitted 在高并发时可能不准,导致写入多次
402+
if (servletResponse == null) { // || servletResponse.isCommitted()) { // isCommitted 在高并发时可能不准,导致写入多次
406403
Log.w(TAG, "invokeMethod listener.complete servletResponse == null || servletResponse.isCommitted() >> return;");
407404
return;
408405
}

src/main/java/apijson/framework/APIJSONFunctionParser.java

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@
2020
import java.rmi.ServerException;
2121
import java.util.ArrayList;
2222
import java.util.Arrays;
23+
import java.util.LinkedHashMap;
2324
import java.util.List;
25+
import java.util.Map;
2426

2527
import javax.servlet.http.HttpSession;
2628

@@ -155,13 +157,11 @@ public static JSONObject init(boolean shutdownWhenServerError, APIJSONCreator cr
155157
throw new NullPointerException("没有可用的远程函数");
156158
}
157159

158-
if (table == null || table.isEmpty()) { // 全量更新
159-
FUNCTION_MAP.clear();
160-
}
161160

162-
JSONObject item;
161+
Map<String, JSONObject> newMap = new LinkedHashMap<>();
162+
163163
for (int i = 0; i < size; i++) {
164-
item = list.getJSONObject(i);
164+
JSONObject item = list.getJSONObject(i);
165165
if (item == null) {
166166
continue;
167167
}
@@ -177,7 +177,7 @@ public static JSONObject init(boolean shutdownWhenServerError, APIJSONCreator cr
177177
// demo.put(JSONRequest.KEY_TAG, item.getString(JSONRequest.KEY_TAG));
178178
// demo.put(JSONRequest.KEY_VERSION, item.getInteger(JSONRequest.KEY_VERSION));
179179

180-
FUNCTION_MAP.put(name, item); //必须在测试 invoke 前!
180+
newMap .put(name, item); //必须在测试 invoke 前!
181181

182182
String[] methods = StringUtil.split(item.getString("methods"));
183183
JSONObject r = new APIJSONParser(
@@ -193,12 +193,19 @@ public static JSONObject init(boolean shutdownWhenServerError, APIJSONCreator cr
193193
}
194194

195195
}
196+
197+
if (isAll) {
198+
FUNCTION_MAP = newMap;
199+
}
200+
else {
201+
FUNCTION_MAP.putAll(newMap);
202+
}
196203

197204
return response;
198205
}
199206

200207

201-
private static void onServerError(String msg, boolean shutdown) throws ServerException {
208+
protected static void onServerError(String msg, boolean shutdown) throws ServerException {
202209
Log.e(TAG, "\n远程函数文档测试未通过!\n请新增 demo 里的函数,或修改 Function 表里的 demo 为已有的函数示例!\n保证前端看到的远程函数文档是正确的!!!\n\n原因:\n" + msg);
203210

204211
if (shutdown) {

0 commit comments

Comments
 (0)