Skip to content

Commit 6e69d75

Browse files
committed
优化 solon-web-servlet-jakarta SolonServletContext 增加 _useLimitStream 选项控制
1 parent 09e88a3 commit 6e69d75

File tree

5 files changed

+35
-48
lines changed

5 files changed

+35
-48
lines changed

solon-jakarta-projects/solon-server/solon-server-jetty-jakarta/src/main/java/org/noear/solon/server/jetty/http/JtHttpContextServletHandler.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,9 @@ protected void preHandle(Context ctx) {
2727
ctx.headerSet("Solon-Boot", JettyPlugin.solon_boot_ver());
2828
}
2929
}
30+
31+
@Override
32+
protected boolean useLimitStream() {
33+
return true;
34+
}
3035
}

solon-jakarta-projects/solon-server/solon-server-jetty-jakarta/src/main/java/org/noear/solon/server/jetty/http/JtHttpRequestWrapper.java

Lines changed: 0 additions & 43 deletions
This file was deleted.

solon-jakarta-projects/solon-server/solon-server-tomcat-jakarta/src/main/java/org/noear/solon/server/tomcat/http/TCHttpContextHandler.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,11 @@ protected void preHandle(Context ctx) {
3434
}
3535
}
3636

37+
@Override
38+
protected boolean useLimitStream() {
39+
return true;
40+
}
41+
3742
@Override
3843
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
3944
if (request.getCharacterEncoding() == null) {

solon-jakarta-projects/solon-web/solon-web-servlet-jakarta/src/main/java/org/noear/solon/web/servlet/SolonServletContext.java

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import org.noear.solon.core.handle.UploadedFile;
3232
import org.noear.solon.core.util.IoUtil;
3333
import org.noear.solon.core.util.MultiMap;
34+
import org.noear.solon.server.io.LimitedInputStream;
3435
import org.noear.solon.server.util.DecodeUtils;
3536
import org.noear.solon.server.util.RedirectUtils;
3637
import org.slf4j.Logger;
@@ -56,12 +57,18 @@
5657
public class SolonServletContext extends ContextBase {
5758
static final Logger log = LoggerFactory.getLogger(SolonServletContext.class);
5859

59-
private HttpServletRequest _request;
60-
private HttpServletResponse _response;
60+
private final HttpServletRequest _request;
61+
private final HttpServletResponse _response;
62+
private final boolean _useLimitStream;
6163

6264
public SolonServletContext(HttpServletRequest request, HttpServletResponse response) {
65+
this(request, response, false);
66+
}
67+
68+
public SolonServletContext(HttpServletRequest request, HttpServletResponse response, boolean useLimitStream) {
6369
_request = request;
6470
_response = response;
71+
_useLimitStream = useLimitStream;
6572

6673
if (sessionState().replaceable()) {
6774
sessionState = new SolonServletSessionState(request);
@@ -178,11 +185,20 @@ public String body(String charset) throws IOException {
178185
}
179186
}
180187

188+
private InputStream limitStream;
181189
@Override
182190
public InputStream bodyAsStream() throws IOException {
183191
assertMaxBodySize();
184192

185-
return _request.getInputStream();
193+
if (_useLimitStream) {
194+
if (limitStream == null) {
195+
limitStream = new LimitedInputStream(_request.getInputStream(), ServerProps.request_maxBodySize);
196+
}
197+
198+
return limitStream;
199+
} else {
200+
return _request.getInputStream();
201+
}
186202
}
187203

188204

solon-jakarta-projects/solon-web/solon-web-servlet-jakarta/src/main/java/org/noear/solon/web/servlet/SolonServletHandler.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,16 +37,20 @@ protected void preHandle(Context ctx) throws IOException {
3737

3838
}
3939

40+
protected boolean useLimitStream() {
41+
return false;
42+
}
43+
4044
@Override
4145
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
42-
SolonServletContext ctx = new SolonServletContext(request, response);
46+
SolonServletContext ctx = new SolonServletContext(request, response, useLimitStream());
4347
ctx.contentType(MimeType.TEXT_PLAIN_UTF8_VALUE);
4448

4549
preHandle(ctx);
4650

4751
Solon.app().tryHandle(ctx);
4852

49-
if(ctx.asyncStarted() == false){
53+
if (ctx.asyncStarted() == false) {
5054
ctx.innerCommit();
5155
}
5256
}

0 commit comments

Comments
 (0)