HttpServlet提供finish404、finish405的可定制化接口

This commit is contained in:
Redkale
2022-09-06 22:08:36 +08:00
parent 86a7ffb642
commit b912e3a35f
3 changed files with 39 additions and 13 deletions

View File

@@ -300,8 +300,8 @@
<response> <response>
<content-type plain="text/plain; charset=utf-8" json="application/json; charset=utf-8"/> <content-type plain="text/plain; charset=utf-8" json="application/json; charset=utf-8"/>
<defcookie domain="" path=""/> <defcookie domain="" path=""/>
<addheader name="Access-Control-Allow-Origin" value="request.headers.Origin" /> <addheader name="Access-Control-Allow-Origin" value="request.headers.Origin" /> <!-- 可多节点 -->
<setheader name="Access-Control-Allow-Headers" value="request.headers.Access-Control-Request-Headers"/> <setheader name="Access-Control-Allow-Headers" value="request.headers.Access-Control-Request-Headers"/> <!-- 可多节点 -->
<setheader name="Access-Control-Allow-Credentials" value="true"/> <setheader name="Access-Control-Allow-Credentials" value="true"/>
<options auto="true" /> <options auto="true" />
<date period="0" /> <date period="0" />

View File

@@ -194,7 +194,7 @@ public class HttpResourceServlet extends HttpServlet {
String uri = request.getRequestURI(); String uri = request.getRequestURI();
if (uri.contains("../")) { if (uri.contains("../")) {
if (logger.isLoggable(Level.FINEST)) logger.log(Level.FINEST, "Not found resource (404) be " + uri + ", request = " + request); if (logger.isLoggable(Level.FINEST)) logger.log(Level.FINEST, "Not found resource (404) be " + uri + ", request = " + request);
response.finish404(); finish404(request, response);
return; return;
} }
if (locationRewrites != null) { if (locationRewrites != null) {
@@ -217,7 +217,7 @@ public class HttpResourceServlet extends HttpServlet {
String suri = uri.toLowerCase(); String suri = uri.toLowerCase();
for (String suffix : renderSuffixs) { for (String suffix : renderSuffixs) {
if (suri.endsWith(suffix)) { if (suri.endsWith(suffix)) {
response.finish404(); finish404(request, response);
return; return;
} }
} }
@@ -231,7 +231,7 @@ public class HttpResourceServlet extends HttpServlet {
} }
if (entry == null) { if (entry == null) {
if (logger.isLoggable(Level.FINER)) logger.log(Level.FINER, "Not found resource (404), url = " + request.getRequestURI()); if (logger.isLoggable(Level.FINER)) logger.log(Level.FINER, "Not found resource (404), url = " + request.getRequestURI());
response.finish404(); finish404(request, response);
} else { } else {
//file = null 表示资源内容在内存而不是在File中 //file = null 表示资源内容在内存而不是在File中
//file = null 时必须传 filename //file = null 时必须传 filename
@@ -288,7 +288,7 @@ public class HttpResourceServlet extends HttpServlet {
int pos; int pos;
while ((pos = in.read(bytes)) != -1) { while ((pos = in.read(bytes)) != -1) {
out.put(bytes, 0, pos); out.put(bytes, 0, pos);
} }
this.servlet = servlet; this.servlet = servlet;
this.file = null; this.file = null;
this.filename = filename; this.filename = filename;
@@ -307,7 +307,7 @@ public class HttpResourceServlet extends HttpServlet {
if (this.servlet.cachedLength.longValue() + length > this.servlet.cachelimit) return; //超过缓存总容量 if (this.servlet.cachedLength.longValue() + length > this.servlet.cachelimit) return; //超过缓存总容量
try { try {
FileInputStream in = new FileInputStream(file); FileInputStream in = new FileInputStream(file);
ByteArray out = new ByteArray((int) file.length()); ByteArray out = new ByteArray((int) file.length());
byte[] bytes = new byte[10240]; byte[] bytes = new byte[10240];
int pos; int pos;
while ((pos = in.read(bytes)) != -1) { while ((pos = in.read(bytes)) != -1) {

View File

@@ -28,10 +28,10 @@ import org.redkale.util.*;
*/ */
public class HttpServlet extends Servlet<HttpContext, HttpRequest, HttpResponse> { public class HttpServlet extends Servlet<HttpContext, HttpRequest, HttpResponse> {
@Deprecated //@since 2.8.0 @Deprecated //@deprecated 2.8.0
public static final int RET_SERVER_ERROR = 1200_0001; public static final int RET_SERVER_ERROR = 1200_0001;
@Deprecated //@since 2.8.0 @Deprecated //@deprecated 2.8.0
public static final int RET_METHOD_ERROR = 1200_0002; public static final int RET_METHOD_ERROR = 1200_0002;
String _actionSimpleMappingUrl; //只给HttpActionServlet使用_actionSimpleMappingUrl不能包含正则表达式比如 /json /createRecord, 不能是 /user/** String _actionSimpleMappingUrl; //只给HttpActionServlet使用_actionSimpleMappingUrl不能包含正则表达式比如 /json /createRecord, 不能是 /user/**
@@ -53,7 +53,7 @@ public class HttpServlet extends Servlet<HttpContext, HttpRequest, HttpResponse>
ActionEntry entry = request.actionEntry; ActionEntry entry = request.actionEntry;
if (entry.rpconly) { if (entry.rpconly) {
if (!request.rpc) { if (!request.rpc) {
response.finish(404, null); finish404(request, response);
return; return;
} else if (request.rpcAuthenticator != null) { } else if (request.rpcAuthenticator != null) {
if (!request.rpcAuthenticator.auth(request, response)) { if (!request.rpcAuthenticator.auth(request, response)) {
@@ -84,7 +84,7 @@ public class HttpServlet extends Servlet<HttpContext, HttpRequest, HttpResponse>
ActionEntry entry = request.actionEntry; ActionEntry entry = request.actionEntry;
if (!entry.checkMethod(request.getMethod())) { if (!entry.checkMethod(request.getMethod())) {
//response.finishJson(new RetResult(RET_METHOD_ERROR, "Method(" + request.getMethod() + ") Error")); //response.finishJson(new RetResult(RET_METHOD_ERROR, "Method(" + request.getMethod() + ") Error"));
response.finish405(); finish405(request, response);
return; return;
} }
request.moduleid = entry.moduleid; request.moduleid = entry.moduleid;
@@ -103,7 +103,7 @@ public class HttpServlet extends Servlet<HttpContext, HttpRequest, HttpResponse>
ActionEntry entry = en.getValue(); ActionEntry entry = en.getValue();
if (!entry.checkMethod(request.getMethod())) { if (!entry.checkMethod(request.getMethod())) {
//response.finishJson(new RetResult(RET_METHOD_ERROR, "Method(" + request.getMethod() + ") Error")); //response.finishJson(new RetResult(RET_METHOD_ERROR, "Method(" + request.getMethod() + ") Error"));
response.finish405(); finish405(request, response);
return; return;
} }
request.actionEntry = entry; request.actionEntry = entry;
@@ -119,7 +119,7 @@ public class HttpServlet extends Servlet<HttpContext, HttpRequest, HttpResponse>
return; return;
} }
} }
response.finish404(); finish404(request, response);
//throw new IOException(this.getClass().getName() + " not found method for URI(" + request.getRequestURI() + ")"); //throw new IOException(this.getClass().getName() + " not found method for URI(" + request.getRequestURI() + ")");
} }
}; };
@@ -147,6 +147,32 @@ public class HttpServlet extends Servlet<HttpContext, HttpRequest, HttpResponse>
public void postStart(HttpContext context, AnyValue config) { public void postStart(HttpContext context, AnyValue config) {
} }
/**
* 提供404状态码的可定制接口
*
* @since 2.8.0
* @param request HttpRequest
* @param response HttpResponse
*
* @throws IOException IOException
*/
protected void finish404(HttpRequest request, HttpResponse response) throws IOException {
response.finish404();
}
/**
* 提供405状态码的可定制接口
*
* @since 2.8.0
* @param request HttpRequest
* @param response HttpResponse
*
* @throws IOException IOException
*/
protected void finish405(HttpRequest request, HttpResponse response) throws IOException {
response.finish405();
}
/** /**
* <p> * <p>
* 预执行方法在execute方法之前运行设置当前用户信息或者加入常规统计和基础检测例如 : <br> * 预执行方法在execute方法之前运行设置当前用户信息或者加入常规统计和基础检测例如 : <br>