diff --git a/src/org/redkale/boot/ApiDocsService.java b/src/org/redkale/boot/ApiDocsService.java index cc5cbcce2..370f64d00 100644 --- a/src/org/redkale/boot/ApiDocsService.java +++ b/src/org/redkale/boot/ApiDocsService.java @@ -25,7 +25,7 @@ import org.redkale.util.*; * @author zhangjx */ @AutoLoad(false) -@LocalService +@Local public final class ApiDocsService extends AbstractService { private final Application app; //Application全局对象 diff --git a/src/org/redkale/boot/NodeHttpServer.java b/src/org/redkale/boot/NodeHttpServer.java index bc1a51d30..252244c4c 100644 --- a/src/org/redkale/boot/NodeHttpServer.java +++ b/src/org/redkale/boot/NodeHttpServer.java @@ -168,7 +168,7 @@ public class NodeHttpServer extends NodeServer { RestService rs = (RestService) stype.getAnnotation(RestService.class); if (rs != null && rs.ignore()) return; if (mustsign && rs == null) return; - if (stype.getAnnotation(LocalService.class) != null && rs == null) return; + if (stype.getAnnotation(Local.class) != null && rs == null) return; final String stypename = stype.getName(); if (!autoload && !includeValues.contains(stypename)) return; diff --git a/src/org/redkale/boot/NodeServer.java b/src/org/redkale/boot/NodeServer.java index 1cc75710a..8a27da39a 100644 --- a/src/org/redkale/boot/NodeServer.java +++ b/src/org/redkale/boot/NodeServer.java @@ -317,7 +317,7 @@ public abstract class NodeServer { final boolean localed = (this.sncpAddress == null && entry.isEmptyGroups() && !serviceImplClass.isInterface() && !Modifier.isAbstract(serviceImplClass.getModifiers())) //非SNCP的Server,通常是单点服务 || groups.contains(this.sncpGroup) //本地IP含在内的 || (this.sncpGroup == null && entry.isEmptyGroups()) //空的SNCP配置 - || serviceImplClass.getAnnotation(LocalService.class) != null;//本地模式 + || serviceImplClass.getAnnotation(Local.class) != null;//本地模式 if (localed && (serviceImplClass.isInterface() || Modifier.isAbstract(serviceImplClass.getModifiers()))) continue; //本地模式不能实例化接口和抽象类的Service类 final BiConsumer runner = (ResourceFactory rf, Boolean needinject) -> { try { diff --git a/src/org/redkale/net/http/HttpRequest.java b/src/org/redkale/net/http/HttpRequest.java index c6bf97c44..10bb55692 100644 --- a/src/org/redkale/net/http/HttpRequest.java +++ b/src/org/redkale/net/http/HttpRequest.java @@ -243,7 +243,7 @@ public class HttpRequest extends Request { } /** - * 设置当前用户信息, 通常在HttpServlet.authenticate方法里设置currentUser
+ * 设置当前用户信息, 通常在HttpServlet.preExecute方法里设置currentUser
* 数据类型由@HttpUserType指定 * * @param 泛型 @@ -257,7 +257,7 @@ public class HttpRequest extends Request { } /** - * 获取当前用户信息, 通常在HttpServlet.authenticate方法里设置currentUser
+ * 获取当前用户信息
* 数据类型由@HttpUserType指定 * * @param @HttpUserType指定的用户信息类型 diff --git a/src/org/redkale/net/http/HttpServlet.java b/src/org/redkale/net/http/HttpServlet.java index 60aaab4b5..4e0d521ed 100644 --- a/src/org/redkale/net/http/HttpServlet.java +++ b/src/org/redkale/net/http/HttpServlet.java @@ -100,10 +100,14 @@ public abstract class HttpServlet extends Servlet - * 预执行方法,在execute方法之前运行,通常用于常规统计或基础检测,例如 :
+ * 预执行方法,在execute方法之前运行,设置当前用户信息,或者加入常规统计和基础检测,例如 :
*
      *      @Override
      *      public void preExecute(final HttpRequest request, final HttpResponse response) throws IOException {
+     *          //设置当前用户信息
+     *          final String sessionid = request.getSessionid(false);
+     *          if (sessionid != null) request.setCurrentUser(userService.current(sessionid));
+     *
      *          if (finer) response.recycleListener((req, resp) -> {  //记录处理时间比较长的请求
      *              long e = System.currentTimeMillis() - ((HttpRequest) req).getCreatetime();
      *              if (e > 200) logger.finer("http-execute-cost-time: " + e + " ms. request = " + req);
@@ -128,7 +132,7 @@ public abstract class HttpServlet extends Servlet
      *      @Override
      *      public void authenticate(HttpRequest request, HttpResponse response) throws IOException {
-     *          UserInfo info = currentUser(request);
+     *          UserInfo info = request.currentUser();
      *          if (info == null) {
      *              response.finishJson(RET_UNLOGIN);
      *              return;
diff --git a/src/org/redkale/net/sncp/SncpClient.java b/src/org/redkale/net/sncp/SncpClient.java
index ea8cc8958..4e37b3291 100644
--- a/src/org/redkale/net/sncp/SncpClient.java
+++ b/src/org/redkale/net/sncp/SncpClient.java
@@ -228,6 +228,7 @@ public final class SncpClient {
             final int mod = method.getModifiers();
             if (Modifier.isStatic(mod)) continue;
             if (Modifier.isFinal(mod)) continue;
+            if (method.getAnnotation(Local.class) != null) continue;
             if (method.getName().equals("getClass") || method.getName().equals("toString")) continue;
             if (method.getName().equals("equals") || method.getName().equals("hashCode")) continue;
             if (method.getName().equals("notify") || method.getName().equals("notifyAll") || method.getName().equals("wait")) continue;
diff --git a/src/org/redkale/service/LocalService.java b/src/org/redkale/service/Local.java
similarity index 65%
rename from src/org/redkale/service/LocalService.java
rename to src/org/redkale/service/Local.java
index 661587c37..39f017b5b 100644
--- a/src/org/redkale/service/LocalService.java
+++ b/src/org/redkale/service/Local.java
@@ -6,12 +6,12 @@
 package org.redkale.service;
 
 import java.lang.annotation.*;
-import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.ElementType.*;
 import static java.lang.annotation.RetentionPolicy.RUNTIME;
 
 /**
  * 本地模式注解。
- * 声明为LocalService的Service只能以本地模式存在, 即使配置文件中配置成远程模式也将被忽略。
+ * 声明为Local的Service只能以本地模式存在, 即使配置文件中配置成远程模式也将被忽略。
  *
  * 

* 详情见: https://redkale.org @@ -20,9 +20,9 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME; */ @Inherited @Documented -@Target({TYPE}) +@Target({TYPE, METHOD, PARAMETER}) @Retention(RUNTIME) -public @interface LocalService { +public @interface Local { String comment() default ""; //备注描述 } diff --git a/src/org/redkale/service/Service.java b/src/org/redkale/service/Service.java index 30551908e..87e4e43b2 100644 --- a/src/org/redkale/service/Service.java +++ b/src/org/redkale/service/Service.java @@ -22,8 +22,8 @@ import org.redkale.util.*; *

  * 异步方法:
  * Service编写异步方法:
- *    1、异步方法有且仅有一个类型为AsyncHandler的参数。若参数类型为AsyncHandler子类,必须保证其子类可被继承且completed、failed可被重载且包含空参数的构造函数。
- *    2、异步方法返回类型必须是void。
+ *    1、异步方法有且仅有一个类型为AsyncHandler的参数, 返回类型必须是void。若参数类型为AsyncHandler子类,必须保证其子类可被继承且completed、failed可被重载且包含空参数的构造函数。
+ *    2、异步方法返回类型是CompletableFuture。
  * 例如:
  *      public void insertRecord(AsyncHandler<Integer, Record> handler, String name, @RpcAttachment Record record);
  *
diff --git a/src/org/redkale/source/CacheMemorySource.java b/src/org/redkale/source/CacheMemorySource.java
index 80871d1d5..69ef6fbd5 100644
--- a/src/org/redkale/source/CacheMemorySource.java
+++ b/src/org/redkale/source/CacheMemorySource.java
@@ -29,7 +29,7 @@ import org.redkale.util.*;
  *
  * @author zhangjx
  */
-@LocalService
+@Local
 @AutoLoad(false)
 @ResourceType({CacheSource.class})
 public class CacheMemorySource extends AbstractService implements CacheSource, Service, AutoCloseable, Resourcable {
diff --git a/src/org/redkale/source/DataJdbcSource.java b/src/org/redkale/source/DataJdbcSource.java
index 669fa64e7..e39cb0702 100644
--- a/src/org/redkale/source/DataJdbcSource.java
+++ b/src/org/redkale/source/DataJdbcSource.java
@@ -25,7 +25,7 @@ import org.redkale.util.*;
  *
  * @author zhangjx
  */
-@LocalService
+@Local
 @AutoLoad(false)
 @SuppressWarnings("unchecked")
 @ResourceType({DataSource.class})
diff --git a/test/org/redkale/test/rest/SimpleRestServlet.java b/test/org/redkale/test/rest/SimpleRestServlet.java
index 344bce291..9bad1234a 100644
--- a/test/org/redkale/test/rest/SimpleRestServlet.java
+++ b/test/org/redkale/test/rest/SimpleRestServlet.java
@@ -16,15 +16,17 @@ public class SimpleRestServlet extends HttpServlet {
     @Resource
     private UserService userService;
 
+    @Override
+    public void preExecute(HttpRequest request, HttpResponse response) throws IOException {
+        final String sessionid = request.getSessionid(false);
+        if (sessionid != null) request.setCurrentUser(userService.current(sessionid));
+        response.nextEvent();
+    }
+
     //普通鉴权
     @Override
     public void authenticate(HttpRequest request, HttpResponse response) throws IOException {
         UserInfo info = request.currentUser();
-        if (info == null) {
-            String sessionid = request.getSessionid(false);
-            if (sessionid != null) info = userService.current(sessionid);
-            if (info != null) request.setCurrentUser(info); //必须赋值给request.currentUser
-        }
         if (info == null) {
             response.finishJson(RET_UNLOGIN);
             return;