ここで、sitebricks の HiddenMethodFilter の実装を見ています。
65 行目に次のコードがあります。
try {
String methodName = httpRequest.getParameter(this.hiddenFieldName);
if ("POST".equalsIgnoreCase(httpRequest.getMethod()) && !Strings.empty(methodName)) {
....
特定のパラメーターが設定されているかどうかを確認し、それを使用してリクエストをラップします。ただし、そのパラメーターを読み取ると、ストリームが消費され、最終的なサーブレットはデータを読み取ることができなくなります。
これを回避する最善の方法は何でしょうか? ここでは、ストリームの内容をバイト配列に読み取るHttpServletRequestWrapper を実装しました。ただし、これはリクエストを保存するために大量のメモリを使用する場合があります。
private HttpServletRequestWrapper getWrappedRequest(HttpServletRequest httpRequest, final byte[] reqBytes)
throws IOException {
final ByteArrayInputStream byteInput = new ByteArrayInputStream(reqBytes);
return new HttpServletRequestWrapper(httpRequest) {
@Override
public ServletInputStream getInputStream() throws IOException {
ServletInputStream sis = new ServletInputStream() {
@Override
public int read() throws IOException {
return byteInput.read();
}
};
return sis;
}
};
}
より良い方法はありますか?ストリームを消費せずにパラメーターを読み取ることはできますか? (ピークに似たもの) ストリームをリセットできますか?