From 641ff4709d4eb0607c571625561dfbc73f789865 Mon Sep 17 00:00:00 2001 From: Redkale <22250530@qq.com> Date: Sat, 18 Mar 2017 19:16:06 +0800 Subject: [PATCH] --- src/org/redkale/net/http/HttpBaseServlet.java | 87 +++++++++++++++---- 1 file changed, 68 insertions(+), 19 deletions(-) diff --git a/src/org/redkale/net/http/HttpBaseServlet.java b/src/org/redkale/net/http/HttpBaseServlet.java index 908d5ddd9..279e50663 100644 --- a/src/org/redkale/net/http/HttpBaseServlet.java +++ b/src/org/redkale/net/http/HttpBaseServlet.java @@ -224,10 +224,78 @@ public abstract class HttpBaseServlet extends HttpServlet { } }; + /** + *

+ * 预执行方法,在execute方法之前运行,通常用于常规统计或基础检测,例如 :
+ *

+     *      @Override
+     *      public void preExecute(final HttpRequest request, final HttpResponse response, HttpServlet next) throws IOException {
+     *          if (finer) response.setRecycleListener((req, resp) -> {  //记录处理时间比较长的请求
+     *              long e = System.currentTimeMillis() - ((HttpRequest) req).getCreatetime();
+     *              if (e > 200) logger.finer("http-execute-cost-time: " + e + " ms. request = " + req);
+     *          });
+     *          next.execute(request, response);
+     *      }
+     * 
+ *

+ * + * @param request HttpRequest + * @param response HttpResponse + * @param next HttpServlet + * + * @throws IOException IOException + */ public void preExecute(HttpRequest request, HttpResponse response, final HttpServlet next) throws IOException { next.execute(request, response); } + /** + * 使用 public void authenticate(int moduleid, int actionid, HttpRequest request, HttpResponse response, final HttpServlet next) throws IOException 代替 + * + * @param moduleid int + * @param actionid int + * @param request HttpRequest + * @param response HttpResponse + * + * @return boolean + * @throws IOException IOException + * @deprecated + */ + @Deprecated + public boolean authenticate(int moduleid, int actionid, HttpRequest request, HttpResponse response) throws IOException { + return true; + } + + /** + *

+ * 用户登录或权限验证, 没有注解为@AuthIgnore 的方法会执行authenticate方法, 若验证成功则必须调用next.execute(request, response);进行下一步操作, 例如:
+ *

+     *      @Override
+     *      public void authenticate(int moduleid, int actionid, HttpRequest request, HttpResponse response, final HttpServlet next) throws IOException {
+     *          UserInfo info = currentUser(request);
+     *          if (info == null) {
+     *              response.finishJson(RET_UNLOGIN);
+     *              return;
+     *          } else if (!info.checkAuth(module, actionid)) {
+     *              response.finishJson(RET_AUTHILLEGAL);
+     *              return;
+     *          }
+     *          next.execute(request, response);
+     *      }
+     * 
+ *

+ * + * + * @param moduleid int + * @param actionid int + * @param request HttpRequest + * @param response HttpResponse + * @param next HttpServlet + * + * @throws IOException IOException + */ + public abstract void authenticate(int moduleid, int actionid, HttpRequest request, HttpResponse response, final HttpServlet next) throws IOException; + @Override public final void execute(HttpRequest request, HttpResponse response) throws IOException { preExecute(request, response, preSuccessServlet); @@ -250,25 +318,6 @@ public abstract class HttpBaseServlet extends HttpServlet { public final void postDestroy(HttpContext context, AnyValue config) { } - /** - * 使用 public void authenticate(int moduleid, int actionid, HttpRequest request, HttpResponse response, final HttpServlet next) throws IOException 代替 - * - * @param moduleid moduleid - * @param actionid actionid - * @param request HttpRequest - * @param response HttpResponse - * - * @return boolean - * @throws IOException IOException - * @deprecated - */ - @Deprecated - public boolean authenticate(int moduleid, int actionid, HttpRequest request, HttpResponse response) throws IOException { - return true; - } - - public abstract void authenticate(int moduleid, int actionid, HttpRequest request, HttpResponse response, final HttpServlet next) throws IOException; - protected void setHeader(HttpRequest request, String name, Serializable value) { request.header.setValue(name, String.valueOf(value)); }