diff --git a/src/org/redkale/boot/NodeHttpServer.java b/src/org/redkale/boot/NodeHttpServer.java index 8ebfe99b9..5ed35ad5a 100644 --- a/src/org/redkale/boot/NodeHttpServer.java +++ b/src/org/redkale/boot/NodeHttpServer.java @@ -158,7 +158,7 @@ public final class NodeHttpServer extends NodeServer { for (AnyValue item : restConf.getAnyValues("service")) { hasServices.add(item.getValue("value", "")); } - + final boolean sncp = this.serverConf.getBoolValue("_$sncp", false); //SNCP服务以REST启动时会赋值_$sncp=true super.interceptorServiceWrappers.forEach((wrapper) -> { if (!wrapper.getName().isEmpty()) return; //只加载resourceName为空的service final Class stype = wrapper.getType(); @@ -185,9 +185,9 @@ public final class NodeHttpServer extends NodeServer { if (!match) return; } - RestHttpServlet servlet = RestServletBuilder.createRestServlet(superClass, wrapper.getName(), stype); + RestHttpServlet servlet = RestServletBuilder.createRestServlet(superClass, wrapper.getName(), stype, sncp); if (servlet == null) return; - if(finest) logger.finest("Create RestServlet = "+servlet); + if (finest) logger.finest("Create RestServlet = " + servlet); try { Field serviceField = servlet.getClass().getDeclaredField("_service"); serviceField.setAccessible(true); diff --git a/src/org/redkale/boot/NodeSncpServer.java b/src/org/redkale/boot/NodeSncpServer.java index bbe796266..38f52a9a0 100644 --- a/src/org/redkale/boot/NodeSncpServer.java +++ b/src/org/redkale/boot/NodeSncpServer.java @@ -32,6 +32,7 @@ public final class NodeSncpServer extends NodeServer { public static NodeServer createNodeServer(Application application, AnyValue serconf) { if (serconf != null && serconf.getAnyValue("rest") != null) { + ((AnyValue.DefaultAnyValue) serconf).addValue("_$sncp", "true"); return new NodeHttpServer(application, serconf); } return new NodeSncpServer(application, serconf); diff --git a/src/org/redkale/net/http/RestServletBuilder.java b/src/org/redkale/net/http/RestServletBuilder.java index 84bd6e42d..52893fe0f 100644 --- a/src/org/redkale/net/http/RestServletBuilder.java +++ b/src/org/redkale/net/http/RestServletBuilder.java @@ -40,12 +40,13 @@ public final class RestServletBuilder { public static String getWebModuleName(Class serviceType) { final RestService controller = serviceType.getAnnotation(RestService.class); - if (controller == null) return null; + if (controller == null) return serviceType.getSimpleName().replaceAll("Service.*$", "").toLowerCase(); + if (controller.ignore()) return null; return (!controller.value().isEmpty()) ? controller.value() : serviceType.getSimpleName().replaceAll("Service.*$", "").toLowerCase(); } //待实现 - public static T createRestServlet(final Class baseServletClass, final String serviceName, final Class serviceType) { + public static T createRestServlet(final Class baseServletClass, final String serviceName, final Class serviceType, final boolean sncp) { if (baseServletClass == null || serviceType == null) return null; if (!RestHttpServlet.class.isAssignableFrom(baseServletClass)) return null; int mod = baseServletClass.getModifiers(); diff --git a/src/org/redkale/util/ResourceFactory.java b/src/org/redkale/util/ResourceFactory.java index 178005a9c..2e9cdf390 100644 --- a/src/org/redkale/util/ResourceFactory.java +++ b/src/org/redkale/util/ResourceFactory.java @@ -15,6 +15,9 @@ import javax.annotation.Resource; /** * 如果Resource(name = "$") 表示资源name采用所属对象的name + * name规则: + * 1: "$"有特殊含义, 不能表示"$"资源本身 + * 2: 只能是字母、数字、(短横)-、(下划线)_、点(.)的组合 *

* 详情见: http://redkale.org * @@ -51,6 +54,12 @@ public final class ResourceFactory { this.store.clear(); } + public void checkName(String name) { + if (name == null || (!name.isEmpty() && !name.matches("^[a-zA-Z_\\-\\.]+$"))) { + throw new IllegalArgumentException("Resource.name(" + name + ") contains illegal character, must be (a-z A-Z 0-9 _ . -)"); + } + } + public A register(final Class clazz, final A rs) { return register(true, clazz, rs); } @@ -141,6 +150,7 @@ public final class ResourceFactory { } public A register(final boolean autoSync, final String name, final A rs) { + checkName(name); final Class claz = rs.getClass(); ResourceType rtype = claz.getAnnotation(ResourceType.class); if (rtype == null) { @@ -164,6 +174,7 @@ public final class ResourceFactory { } public A register(final boolean autoSync, final String name, final Type clazz, final A rs) { + checkName(name); ConcurrentHashMap map = this.store.get(clazz); if (map == null) { ConcurrentHashMap sub = new ConcurrentHashMap(); @@ -490,7 +501,7 @@ public final class ResourceFactory { m = method; m.setAccessible(true); break; - } + } } } while ((loop = loop.getSuperclass()) != Object.class); listenerMethods.put(clazz, m);