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