改造HttpBaseServlet 的preExecute 和 authenticate 方法
This commit is contained in:
@@ -5,6 +5,7 @@
|
|||||||
*/
|
*/
|
||||||
package org.redkale.net;
|
package org.redkale.net;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.nio.channels.CompletionHandler;
|
import java.nio.channels.CompletionHandler;
|
||||||
import java.util.function.BiConsumer;
|
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 BiConsumer<R, Response<C, R>> recycleListener;
|
||||||
|
|
||||||
|
protected Servlet nextServlet;
|
||||||
|
|
||||||
private final CompletionHandler finishHandler = new CompletionHandler<Integer, ByteBuffer>() {
|
private final CompletionHandler finishHandler = new CompletionHandler<Integer, ByteBuffer>() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -114,6 +117,7 @@ public abstract class Response<C extends Context, R extends Request<C>> {
|
|||||||
recycleListener = null;
|
recycleListener = null;
|
||||||
}
|
}
|
||||||
this.output = null;
|
this.output = null;
|
||||||
|
this.nextServlet = null;
|
||||||
request.recycle();
|
request.recycle();
|
||||||
if (channel != null) {
|
if (channel != null) {
|
||||||
if (keepAlive) {
|
if (keepAlive) {
|
||||||
@@ -140,6 +144,20 @@ public abstract class Response<C extends Context, R extends Request<C>> {
|
|||||||
this.request.createtime = System.currentTimeMillis();
|
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) {
|
public void setRecycleListener(BiConsumer<R, Response<C, R>> recycleListener) {
|
||||||
this.recycleListener = recycleListener;
|
this.recycleListener = recycleListener;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -215,6 +215,7 @@ public abstract class HttpBaseServlet extends HttpServlet {
|
|||||||
if (entry.ignore) {
|
if (entry.ignore) {
|
||||||
authSuccessServlet.execute(request, response);
|
authSuccessServlet.execute(request, response);
|
||||||
} else {
|
} else {
|
||||||
|
response.nextEvent(authSuccessServlet);
|
||||||
authenticate(entry.moduleid, entry.actionid, request, response, authSuccessServlet);
|
authenticate(entry.moduleid, entry.actionid, request, response, authSuccessServlet);
|
||||||
}
|
}
|
||||||
return;
|
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>
|
* <p>
|
||||||
* 预执行方法,在execute方法之前运行,通常用于常规统计或基础检测,例如 : <br>
|
* 预执行方法,在execute方法之前运行,通常用于常规统计或基础检测,例如 : <br>
|
||||||
* <blockquote><pre>
|
* <blockquote><pre>
|
||||||
* @Override
|
* @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) -> { //记录处理时间比较长的请求
|
* if (finer) response.setRecycleListener((req, resp) -> { //记录处理时间比较长的请求
|
||||||
* long e = System.currentTimeMillis() - ((HttpRequest) req).getCreatetime();
|
* long e = System.currentTimeMillis() - ((HttpRequest) req).getCreatetime();
|
||||||
* if (e > 200) logger.finer("http-execute-cost-time: " + e + " ms. request = " + req);
|
* if (e > 200) logger.finer("http-execute-cost-time: " + e + " ms. request = " + req);
|
||||||
* });
|
* });
|
||||||
* next.execute(request, response);
|
* response.nextEvent();
|
||||||
* }
|
* }
|
||||||
* </pre></blockquote>
|
* </pre></blockquote>
|
||||||
* <p>
|
* <p>
|
||||||
*
|
*
|
||||||
* @param request HttpRequest
|
* @param request HttpRequest
|
||||||
* @param response HttpResponse
|
* @param response HttpResponse
|
||||||
* @param next HttpServlet
|
|
||||||
*
|
*
|
||||||
* @throws IOException IOException
|
* @throws IOException IOException
|
||||||
*/
|
*/
|
||||||
public void preExecute(HttpRequest request, HttpResponse response, final HttpServlet next) throws IOException {
|
public void preExecute(HttpRequest request, HttpResponse response) throws IOException {
|
||||||
next.execute(request, response);
|
response.nextEvent();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -298,7 +313,10 @@ public abstract class HttpBaseServlet extends HttpServlet {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final void execute(HttpRequest request, HttpResponse response) throws IOException {
|
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) {
|
public final void preInit(HttpContext context, AnyValue config) {
|
||||||
|
|||||||
@@ -158,6 +158,16 @@ public class HttpResponse extends Response<HttpContext, HttpRequest> {
|
|||||||
super.init(channel);
|
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