diff --git a/src/org/redkale/boot/NodeServer.java b/src/org/redkale/boot/NodeServer.java index cce9f51d9..515453214 100644 --- a/src/org/redkale/boot/NodeServer.java +++ b/src/org/redkale/boot/NodeServer.java @@ -513,6 +513,10 @@ public abstract class NodeServer { return false; } + public boolean isWATCH() { + return false; + } + public ResourceFactory getResourceFactory() { return resourceFactory; } diff --git a/src/org/redkale/boot/NodeWatchServer.java b/src/org/redkale/boot/NodeWatchServer.java index e1afd2861..63a50df3a 100644 --- a/src/org/redkale/boot/NodeWatchServer.java +++ b/src/org/redkale/boot/NodeWatchServer.java @@ -42,4 +42,9 @@ public class NodeWatchServer extends NodeHttpServer { protected ClassFilter createOtherClassFilter() { return null; } + + @Override + public boolean isWATCH() { + return true; + } } diff --git a/src/org/redkale/boot/watch/FilterWatchService.java b/src/org/redkale/boot/watch/FilterWatchService.java index a4e062216..862fb3f2d 100644 --- a/src/org/redkale/boot/watch/FilterWatchService.java +++ b/src/org/redkale/boot/watch/FilterWatchService.java @@ -7,7 +7,7 @@ package org.redkale.boot.watch; import java.io.IOException; import javax.annotation.Resource; -import org.redkale.boot.Application; +import org.redkale.boot.*; import org.redkale.net.TransportFactory; import org.redkale.net.http.*; import org.redkale.service.RetResult; @@ -29,6 +29,9 @@ public class FilterWatchService extends AbstractWatchService { @Comment("Node节点IP地址已存在") public static final int RET_FILTER_EXISTS = 1601_0003; + @Comment("Node节点IP地址已存在") + public static final int RET_JAR_ILLEGAL = 1601_0004; + @Resource private Application application; @@ -36,9 +39,14 @@ public class FilterWatchService extends AbstractWatchService { private TransportFactory transportFactory; @RestMapping(name = "addfilter", auth = false, comment = "动态增加Filter") - public RetResult addFilter(@RestParam(name = "server", comment = "Server节点名, 不指定名称则所有符合条件的Server都会增加Filter") final String serverName, + public RetResult addFilter(@RestUploadFile(maxLength = 10 * 1024 * 1024, fileNameReg = "\\.jar$") byte[] jar, + @RestParam(name = "server", comment = "Server节点名, 不指定名称则所有符合条件的Server都会增加Filter") final String serverName, @RestParam(name = "type", comment = "Filter类名") final String filterType) throws IOException { if (filterType == null) return new RetResult(RET_FILTER_TYPE_ILLEGAL, "Filter Type (" + filterType + ") is illegal"); + if (jar == null) return new RetResult(RET_JAR_ILLEGAL, "Not found jar file"); + for (NodeServer node : application.getNodeServers()) { + if (node.getServer().containsFilter(filterType)) return new RetResult(RET_JAR_ILLEGAL, "Filter(" + filterType + ") exists"); + } return RetResult.success(); } } diff --git a/src/org/redkale/net/PrepareServlet.java b/src/org/redkale/net/PrepareServlet.java index b0bca86c9..1de5a7667 100644 --- a/src/org/redkale/net/PrepareServlet.java +++ b/src/org/redkale/net/PrepareServlet.java @@ -72,6 +72,15 @@ public abstract class PrepareServlet(servlets)) { + if (servlet.getClass().getName().equals(servletClassName)) return true; + } + return false; + } + } + protected void putMapping(K key, S servlet) { synchronized (lock2) { Map newmappings = new HashMap<>(mappings); @@ -144,11 +153,11 @@ public abstract class PrepareServlet removeFilter(Class> filterClass) { + public > T removeFilter(Class filterClass) { return removeFilter(f -> filterClass.equals(f.getClass())); } - public boolean containsFilter(Class> filterClass) { + public boolean containsFilter(Class filterClass) { if (this.headFilter == null || filterClass == null) return false; Filter filter = this.headFilter; do { @@ -157,13 +166,22 @@ public abstract class PrepareServlet removeFilter(Predicate> predicate) { + public boolean containsFilter(String filterClassName) { + if (this.headFilter == null || filterClassName == null) return false; + Filter filter = this.headFilter; + do { + if (filter.getClass().getName().equals(filterClassName)) return true; + } while ((filter = filter._next) != null); + return false; + } + + public > T removeFilter(Predicate predicate) { if (this.headFilter == null || predicate == null) return null; synchronized (filters) { Filter filter = this.headFilter; Filter prev = null; do { - if (predicate.test(filter)) break; + if (predicate.test((T) filter)) break; prev = filter; } while ((filter = filter._next) != null); if (filter != null) { @@ -175,7 +193,7 @@ public abstract class PrepareServlet 泛型 + * @param filterClass Filter类 + * + * @return boolean + */ + public boolean containsFilter(Class filterClass) { + return this.prepare.containsFilter(filterClass); + } + + /** + * 判断是否存在Filter + * + * @param 泛型 + * @param filterClassName Filter类 + * + * @return boolean + */ + public boolean containsFilter(String filterClassName) { + return this.prepare.containsFilter(filterClassName); + } + + /** + * 判断是否存在Servlet + * + * @param servletClass Servlet类 + * + * @return boolean + */ + public boolean containsServlet(Class servletClass) { + return this.prepare.containsServlet(servletClass); + } + + /** + * 判断是否存在Servlet + * + * @param servletClassName Servlet类 + * + * @return boolean + */ + public boolean containsServlet(String servletClassName) { + return this.prepare.containsServlet(servletClassName); + } + /** * 销毁Servlet * diff --git a/src/org/redkale/net/http/HttpResourceServlet.java b/src/org/redkale/net/http/HttpResourceServlet.java index 8493e8c26..7f77afd82 100644 --- a/src/org/redkale/net/http/HttpResourceServlet.java +++ b/src/org/redkale/net/http/HttpResourceServlet.java @@ -162,6 +162,24 @@ public class HttpResourceServlet extends HttpServlet { } } + public void serRoot(String rootstr) { + if (rootstr == null) return; + try { + this.root = new File(rootstr).getCanonicalFile(); + } catch (IOException ioe) { + this.root = new File(rootstr); + } + } + + public void serRoot(File file) { + if (file == null) return; + try { + this.root = file.getCanonicalFile(); + } catch (IOException ioe) { + this.root = file; + } + } + protected static long parseLenth(String value, long defValue) { if (value == null) return defValue; value = value.toUpperCase().replace("B", ""); diff --git a/src/org/redkale/net/http/HttpServer.java b/src/org/redkale/net/http/HttpServer.java index dd4851602..528fafda1 100644 --- a/src/org/redkale/net/http/HttpServer.java +++ b/src/org/redkale/net/http/HttpServer.java @@ -43,8 +43,8 @@ public class HttpServer extends Server T removeFilter(Class filterClass) { + public T removeHttpFilter(Class filterClass) { return (T) this.prepare.removeFilter(filterClass); } - /** - * 判断是否存在HttpFilter - * - * @param 泛型 - * @param filterClass HttpFilter类 - * - * @return boolean - */ - public boolean containsHttpFilter(Class filterClass) { - return this.prepare.containsFilter(filterClass); - } - /** * 添加HttpFilter * @@ -171,18 +159,6 @@ public class HttpServer extends Server 泛型 - * @param servletClass HttpServlet类 - * - * @return boolean - */ - public boolean containsHttpServlet(Class servletClass) { - return this.prepare.containsServlet(servletClass); - } - /** * 添加WebSocketServlet * diff --git a/src/org/redkale/net/sncp/SncpServer.java b/src/org/redkale/net/sncp/SncpServer.java index 41936cd6e..241b16ab9 100644 --- a/src/org/redkale/net/sncp/SncpServer.java +++ b/src/org/redkale/net/sncp/SncpServer.java @@ -45,7 +45,7 @@ public class SncpServer extends Server T removeFilter(Class filterClass) { + public T removeSncpFilter(Class filterClass) { return (T) this.prepare.removeFilter(filterClass); } @@ -62,18 +62,6 @@ public class SncpServer extends Server 泛型 - * @param filterClass SncpFilter类 - * - * @return SncpFilter - */ - public boolean containsSncpFilter(Class filterClass) { - return this.prepare.containsFilter(filterClass); - } - /** * 删除SncpServlet * @@ -94,18 +82,6 @@ public class SncpServer extends Server 泛型 - * @param servletClass SncpServlet类 - * - * @return boolean - */ - public boolean containsSncpServlet(Class servletClass) { - return this.prepare.containsServlet(servletClass); - } - @Override @SuppressWarnings("unchecked") protected SncpContext createContext() {