- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我正在尝试调整 HttpServletRequestWrapper(参见 How to read InputStream multiple times),以便在过滤器中使用 HTTP Post 正文后能够读取它。现在我遇到了如何实现 ServletInputStream 的挑战。从规范 3.1 开始,必须实现一些新方法。
我正在寻找有关如何实现这些方法的示例或一些代码。有什么提示吗?
最佳答案
示例实现:
import com.google.common.primitives.Bytes;
import javax.servlet.ReadListener;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
public class AuthenticationRequestWrapper extends HttpServletRequestWrapper {
// tag::variables[]
private byte[] requestBody = new byte[0];
private boolean bufferFilled = false;
// end::variables[]
/**
- Constructs a request object wrapping the given request.
*
- @param request The request to wrap
- @throws IllegalArgumentException if the request is null
*/
public AuthenticationRequestWrapper(HttpServletRequest request) {
super(request);
}
// tag::getRequestBody[]
public byte[] getRequestBody() throws IOException {
if (bufferFilled) {
return Arrays.copyOf(requestBody, requestBody.length);
}
InputStream inputStream = super.getInputStream();
byte[] buffer = new byte[102400]; // 100kb buffer
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
requestBody = Bytes.concat(this.requestBody, Arrays.copyOfRange(buffer, 0, bytesRead)); // <1>
}
bufferFilled = true;
return requestBody;
}
// end::getRequestBody[]
// tag::getInputStream[]
@Override
public ServletInputStream getInputStream() throws IOException {
return new CustomServletInputStream(getRequestBody()); // <1>
}
// end::getInputStream[]
private static class CustomServletInputStream extends ServletInputStream {
private ByteArrayInputStream buffer;
public CustomServletInputStream(byte[] contents) {
this.buffer = new ByteArrayInputStream(contents);
}
@Override
public int read() throws IOException {
return buffer.read();
}
@Override
public boolean isFinished() {
return buffer.available() == 0;
}
@Override
public boolean isReady() {
return true;
}
@Override
public void setReadListener(ReadListener listener) {
throw new RuntimeException("Not implemented");
}
}
}
关于java - HttpServletRequestWrapper,setReadListener/isFinished/isReady 的示例实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29208456/
我正在尝试实现激励广告 - Rewarded Ads New APIs (Beta) .视频已加载,并且 isReady 属性在几秒钟内更改为 true。 我有一个按钮,用户按下该按钮就会出现奖励视频
IsReady 属性 如果指定的驱动器就绪,返回 True;否则返回 False。 object.IsReady object 应为 Drive&nbs
我正在制作一个输入流速率计。它基本上是一个公开请求流调用并计算每秒可以处理多少条消息的服务。 由于客户端在发送消息时是完全异步的,因此我使用 ClientCallStreamObserver 在流准备
ServletOutputStream.isReady() javadoc says the following : Returns: true if a write to this ServletO
情况 我正在调试一些对目录路径执行一些存在性检查的遗留代码。首先,检查 DirectoryPathA 并返回它(如果存在)。这应该是通常的情况。如果失败,将检查并返回 DirectoryPathB。
我在集成 Unity 广告时遇到问题。我的要求是,在玩了几次免费游戏之后,用户应该在下一次游戏发布时通过广告,然后他就可以玩游戏了。但是当我检查展示位置是否准备就绪以便我可以在 IUnityAdsLi
我正在尝试在 ios 上实现 Admob Interstitial 广告。 这是我目前的情况,这是我第一次接触 objective-c,所以请多关照。 // Simple Admob Intersti
我在使用 Video.JS 脚本(结合 BigVideo.js)时遇到一点问题 第 2511 行:this.tech.isReady 为空或不是对象 以下情况发生在 IE7-8 和 Firefox 1
我正在尝试找到与 Windows 函数等效的 Python 函数 DriveInfo.IsReady 。我花了一段时间搜索 win32api 和 win32file 提供的函数,但我找不到任何东西(尽
我正在尝试调整 HttpServletRequestWrapper(参见 How to read InputStream multiple times),以便在过滤器中使用 HTTP Post 正文后
我需要一些关于 Unity 的帮助。我正在开发一款简单的手机游戏,只剩下广告了。我正在使用 Unity 5.5.3。我确实在服务中设置了所有内容,并包含了在 PC 上运行良好的代码。当我调用 Show
我试图在我的设备或 Android 模拟器上运行我的应用程序,但我收到以下错误消息: Uncaught TypeError: Cannot read property 'isReady' of und
我是一名优秀的程序员,十分优秀!