改造HttpBaseServlet 的preExecute 和 authenticate 方法
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
* @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) -> { //记录处理时间比较长的请求
|
||||
* long e = System.currentTimeMillis() - ((HttpRequest) req).getCreatetime();
|
||||
* if (e > 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) {
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取状态码对应的状态描述
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user