改造HttpBaseServlet 的preExecute 和 authenticate 方法

This commit is contained in:
Redkale
2017-05-11 14:56:48 +08:00
parent fa2513d934
commit 3b54484832
3 changed files with 52 additions and 6 deletions

View File

@@ -5,6 +5,7 @@
*/
package org.redkale.net;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.CompletionHandler;
import java.util.function.BiConsumer;
@@ -34,6 +35,8 @@ public abstract class Response<C extends Context, R extends Request<C>> {
protected BiConsumer<R, Response<C, R>> recycleListener;
protected Servlet nextServlet;
private final CompletionHandler finishHandler = new CompletionHandler<Integer, ByteBuffer>() {
@Override
@@ -114,6 +117,7 @@ public abstract class Response<C extends Context, R extends Request<C>> {
recycleListener = null;
}
this.output = null;
this.nextServlet = null;
request.recycle();
if (channel != null) {
if (keepAlive) {
@@ -140,6 +144,20 @@ public abstract class Response<C extends Context, R extends Request<C>> {
this.request.createtime = System.currentTimeMillis();
}
@SuppressWarnings("unchecked")
protected <S extends Servlet> void nextEvent(S nextServlet) {
this.nextServlet = nextServlet;
}
@SuppressWarnings("unchecked")
protected void nextEvent() throws IOException {
if (this.nextServlet != null) {
Servlet s = this.nextServlet;
this.nextServlet = null;
s.execute(request, this);
}
}
public void setRecycleListener(BiConsumer<R, Response<C, R>> recycleListener) {
this.recycleListener = recycleListener;
}

View File

@@ -215,6 +215,7 @@ public abstract class HttpBaseServlet extends HttpServlet {
if (entry.ignore) {
authSuccessServlet.execute(request, response);
} else {
response.nextEvent(authSuccessServlet);
authenticate(entry.moduleid, entry.actionid, request, response, authSuccessServlet);
}
return;
@@ -224,29 +225,43 @@ public abstract class HttpBaseServlet extends HttpServlet {
}
};
/**
* 使用 public void preExecute(HttpRequest request, HttpResponse response) throws IOException 代替
*
* @param request HttpRequest
* @param response HttpResponse
* @param next HttpServlet
*
* @deprecated
*
* @throws IOException IOException
*/
@Deprecated
public void preExecute(HttpRequest request, HttpResponse response, final HttpServlet next) throws IOException {
}
/**
* <p>
* 预执行方法在execute方法之前运行通常用于常规统计或基础检测例如 : <br>
* <blockquote><pre>
* &#64;Override
* public void preExecute(final HttpRequest request, final HttpResponse response, HttpServlet next) throws IOException {
* public void preExecute(final HttpRequest request, final HttpResponse response) throws IOException {
* if (finer) response.setRecycleListener((req, resp) -&#62; { //记录处理时间比较长的请求
* long e = System.currentTimeMillis() - ((HttpRequest) req).getCreatetime();
* if (e &#62; 200) logger.finer("http-execute-cost-time: " + e + " ms. request = " + req);
* });
* next.execute(request, response);
* response.nextEvent();
* }
* </pre></blockquote>
* <p>
*
* @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 preExecute(HttpRequest request, HttpResponse response) throws IOException {
response.nextEvent();
}
/**
@@ -298,7 +313,10 @@ public abstract class HttpBaseServlet extends HttpServlet {
@Override
public final void execute(HttpRequest request, HttpResponse response) throws IOException {
preExecute(request, response, preSuccessServlet);
response.nextEvent(preSuccessServlet);
preExecute(request, response);
//兼容以前
//preExecute(request, response, preSuccessServlet);
}
public final void preInit(HttpContext context, AnyValue config) {

View File

@@ -158,6 +158,16 @@ public class HttpResponse extends Response<HttpContext, HttpRequest> {
super.init(channel);
}
@Override
protected <S extends Servlet> void nextEvent(S nextServlet) {
super.nextEvent(nextServlet);
}
@Override
public void nextEvent() throws IOException {
super.nextEvent();
}
/**
* 获取状态码对应的状态描述
*