From ccceaa260794267f5f38492f89925e4deb334deb Mon Sep 17 00:00:00 2001
From: Redkale <22250530@qq.com>
Date: Fri, 19 May 2017 13:21:09 +0800
Subject: [PATCH]
---
src/org/redkale/net/http/HttpFilter.java | 4 ++
.../redkale/net/http/HttpPrepareServlet.java | 51 ++++++++++---------
src/org/redkale/net/http/HttpServer.java | 39 +++++++-------
3 files changed, 53 insertions(+), 41 deletions(-)
diff --git a/src/org/redkale/net/http/HttpFilter.java b/src/org/redkale/net/http/HttpFilter.java
index b5788b688..ecd11c6ea 100644
--- a/src/org/redkale/net/http/HttpFilter.java
+++ b/src/org/redkale/net/http/HttpFilter.java
@@ -8,6 +8,10 @@ package org.redkale.net.http;
import org.redkale.net.Filter;
/**
+ * HTTP 过滤器
+ *
+ *
+ * 详情见: https://redkale.org
*
* @author zhangjx
*/
diff --git a/src/org/redkale/net/http/HttpPrepareServlet.java b/src/org/redkale/net/http/HttpPrepareServlet.java
index e931fc4ac..57820b560 100644
--- a/src/org/redkale/net/http/HttpPrepareServlet.java
+++ b/src/org/redkale/net/http/HttpPrepareServlet.java
@@ -40,15 +40,15 @@ public class HttpPrepareServlet extends PrepareServlet> excludeUrlMaps; //禁用的URL的正则表达式, 必须与 excludeUrlPredicates 保持一致
+ private Map> forbidURIMaps; //禁用的URL的正则表达式, 必须与 forbidURIPredicates 保持一致
- private BiPredicate[] excludeUrlPredicates; //禁用的URL的Predicate, 必须与 excludeUrlMaps 保持一致
+ private BiPredicate[] forbidURIPredicates; //禁用的URL的Predicate, 必须与 forbidURIMaps 保持一致
- public void addExcludeUrlReg(final String urlreg) {
- if (urlreg == null || urlreg.isEmpty()) return;
+ public boolean addForbidURIReg(final String urlreg) {
+ if (urlreg == null || urlreg.isEmpty()) return false;
synchronized (excludeLock) {
- if (excludeUrlMaps != null && excludeUrlMaps.containsKey(urlreg)) return;
- if (excludeUrlMaps == null) excludeUrlMaps = new HashMap<>();
+ if (forbidURIMaps != null && forbidURIMaps.containsKey(urlreg)) return false;
+ if (forbidURIMaps == null) forbidURIMaps = new HashMap<>();
String mapping = urlreg;
if (Utility.contains(mapping, '.', '*', '{', '[', '(', '|', '^', '$', '+', '?', '\\')) { //是否是正则表达式))
if (mapping.endsWith("/*")) {
@@ -63,35 +63,37 @@ public class HttpPrepareServlet extends PrepareServlet predicate = (prefix, uri) -> {
return begin || prefix.isEmpty() ? regPredicate.test(uri) : uri.matches(prefix + reg);
};
- excludeUrlMaps.put(urlreg, predicate);
- excludeUrlPredicates = Utility.append(excludeUrlPredicates, predicate);
+ forbidURIMaps.put(urlreg, predicate);
+ forbidURIPredicates = Utility.append(forbidURIPredicates, predicate);
+ return true;
}
}
- public void removeExcludeUrlReg(final String urlreg) {
- if (urlreg == null || urlreg.isEmpty()) return;
+ public boolean removeForbidURIReg(final String urlreg) {
+ if (urlreg == null || urlreg.isEmpty()) return false;
synchronized (excludeLock) {
- if (excludeUrlMaps == null || excludeUrlPredicates == null || !excludeUrlMaps.containsKey(urlreg)) return;
- BiPredicate predicate = excludeUrlMaps.get(urlreg);
- excludeUrlMaps.remove(urlreg);
+ if (forbidURIMaps == null || forbidURIPredicates == null || !forbidURIMaps.containsKey(urlreg)) return false;
+ BiPredicate predicate = forbidURIMaps.get(urlreg);
+ forbidURIMaps.remove(urlreg);
int index = -1;
- for (int i = 0; i < excludeUrlPredicates.length; i++) {
- if (excludeUrlPredicates[i] == predicate) {
+ for (int i = 0; i < forbidURIPredicates.length; i++) {
+ if (forbidURIPredicates[i] == predicate) {
index = i;
break;
}
}
if (index > -1) {
- if (excludeUrlPredicates.length == 1) {
- excludeUrlPredicates = null;
+ if (forbidURIPredicates.length == 1) {
+ forbidURIPredicates = null;
} else {
- int newlen = excludeUrlPredicates.length - 1;
+ int newlen = forbidURIPredicates.length - 1;
BiPredicate[] news = new BiPredicate[newlen];
- System.arraycopy(excludeUrlPredicates, 0, news, 0, index);
- System.arraycopy(excludeUrlPredicates, index + 1, news, index, newlen - index);
- excludeUrlPredicates = news;
+ System.arraycopy(forbidURIPredicates, 0, news, 0, index);
+ System.arraycopy(forbidURIPredicates, index + 1, news, index, newlen - index);
+ forbidURIPredicates = news;
}
}
+ return true;
}
}
@@ -134,7 +136,7 @@ public class HttpPrepareServlet extends PrepareServlet 0) {
- for (BiPredicate predicate : excludeUrlPredicates) {
+ BiPredicate[] forbidUrlPredicates = this.forbidURIPredicates;
+ if (forbidUrlPredicates != null && forbidUrlPredicates.length > 0) {
+ for (BiPredicate predicate : forbidUrlPredicates) {
if (predicate != null && predicate.test(servlet._prefix, uri)) {
forbid = true;
break;
diff --git a/src/org/redkale/net/http/HttpServer.java b/src/org/redkale/net/http/HttpServer.java
index 75ec70eb6..abbc6d302 100644
--- a/src/org/redkale/net/http/HttpServer.java
+++ b/src/org/redkale/net/http/HttpServer.java
@@ -57,6 +57,28 @@ public class HttpServer extends Server