HttpServlet 不再支持/aa/bbcc 能匹配到 /aa/bb
This commit is contained in:
@@ -39,6 +39,8 @@ public class HttpServlet extends Servlet<HttpContext, HttpRequest, HttpResponse>
|
|||||||
|
|
||||||
private Map.Entry<String, InnerActionEntry>[] mappings; //字段名Rest有用到
|
private Map.Entry<String, InnerActionEntry>[] mappings; //字段名Rest有用到
|
||||||
|
|
||||||
|
private Map<String, InnerActionEntry> mappingMap;
|
||||||
|
|
||||||
//这里不能直接使用HttpServlet,会造成死循环初始化HttpServlet
|
//这里不能直接使用HttpServlet,会造成死循环初始化HttpServlet
|
||||||
private final Servlet<HttpContext, HttpRequest, HttpResponse> authSuccessServlet = new Servlet<HttpContext, HttpRequest, HttpResponse>() {
|
private final Servlet<HttpContext, HttpRequest, HttpResponse> authSuccessServlet = new Servlet<HttpContext, HttpRequest, HttpResponse>() {
|
||||||
@Override
|
@Override
|
||||||
@@ -66,28 +68,34 @@ public class HttpServlet extends Servlet<HttpContext, HttpRequest, HttpResponse>
|
|||||||
private final Servlet<HttpContext, HttpRequest, HttpResponse> preSuccessServlet = new Servlet<HttpContext, HttpRequest, HttpResponse>() {
|
private final Servlet<HttpContext, HttpRequest, HttpResponse> preSuccessServlet = new Servlet<HttpContext, HttpRequest, HttpResponse>() {
|
||||||
@Override
|
@Override
|
||||||
public void execute(HttpRequest request, HttpResponse response) throws IOException {
|
public void execute(HttpRequest request, HttpResponse response) throws IOException {
|
||||||
for (Map.Entry<String, InnerActionEntry> en : mappings) {
|
InnerActionEntry entry = mappingMap.get(request.getRequestURI());
|
||||||
if (request.getRequestURI().startsWith(en.getKey())) {
|
if (entry == null) {
|
||||||
InnerActionEntry entry = en.getValue();
|
for (Map.Entry<String, InnerActionEntry> en : mappings) {
|
||||||
if (!entry.checkMethod(request.getMethod())) {
|
if (request.getRequestURI().startsWith(en.getKey() + "/")) {
|
||||||
response.finishJson(new RetResult(RET_METHOD_ERROR, "Method(" + request.getMethod() + ") Error"));
|
entry = en.getValue();
|
||||||
return;
|
break;
|
||||||
}
|
}
|
||||||
request.attachment = entry;
|
|
||||||
request.moduleid = entry.moduleid;
|
|
||||||
request.actionid = entry.actionid;
|
|
||||||
request.annotations = entry.annotations;
|
|
||||||
if (entry.auth) {
|
|
||||||
response.thenEvent(authSuccessServlet);
|
|
||||||
authenticate(request, response);
|
|
||||||
} else {
|
|
||||||
authSuccessServlet.execute(request, response);
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
response.finish404();
|
if (entry == null) {
|
||||||
//throw new IOException(this.getClass().getName() + " not found method for URI(" + request.getRequestURI() + ")");
|
response.finish404();
|
||||||
|
//throw new IOException(this.getClass().getName() + " not found method for URI(" + request.getRequestURI() + ")");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!entry.checkMethod(request.getMethod())) {
|
||||||
|
response.finishJson(new RetResult(RET_METHOD_ERROR, "Method(" + request.getMethod() + ") Error"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
request.attachment = entry;
|
||||||
|
request.moduleid = entry.moduleid;
|
||||||
|
request.actionid = entry.actionid;
|
||||||
|
request.annotations = entry.annotations;
|
||||||
|
if (entry.auth) {
|
||||||
|
response.thenEvent(authSuccessServlet);
|
||||||
|
authenticate(request, response);
|
||||||
|
} else {
|
||||||
|
authSuccessServlet.execute(request, response);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -98,6 +106,7 @@ public class HttpServlet extends Servlet<HttpContext, HttpRequest, HttpResponse>
|
|||||||
WebServlet ws = this.getClass().getAnnotation(WebServlet.class);
|
WebServlet ws = this.getClass().getAnnotation(WebServlet.class);
|
||||||
if (ws != null && !ws.repair()) path = "";
|
if (ws != null && !ws.repair()) path = "";
|
||||||
HashMap<String, InnerActionEntry> map = this._tmpentrys != null ? this._tmpentrys : loadActionEntry();
|
HashMap<String, InnerActionEntry> map = this._tmpentrys != null ? this._tmpentrys : loadActionEntry();
|
||||||
|
this.mappingMap = map;
|
||||||
this.mappings = new Map.Entry[map.size()];
|
this.mappings = new Map.Entry[map.size()];
|
||||||
int i = -1;
|
int i = -1;
|
||||||
for (Map.Entry<String, InnerActionEntry> en : map.entrySet()) {
|
for (Map.Entry<String, InnerActionEntry> en : map.entrySet()) {
|
||||||
|
|||||||
Reference in New Issue
Block a user