REST 呼び出しを認証/承認するフィルターがあります。このフィルターは要求パラメーターにアクセスする必要があるため、このためにカスタム HTTPServletRequestWrapper を作成しました。
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
public class WrapperRequest extends HttpServletRequestWrapper {
private Map<String, String[]> requestParams = null;
public WrapperRequest(final ServletRequest request) {
super((HttpServletRequest) request);
}
@Override
public String getParameter(final String name) {
if (getParameterMap().get(name) != null) {
return getParameterMap().get(name)[0];
} else {
getParameterMap().get(name)[0] = super.getParameter(name);
requestParams.put(name, getParameterMap().get(name));
return requestParams.get(name)[0];
}
}
@Override
public Map<String, String[]> getParameterMap() {
if (requestParams == null) {
requestParams = new HashMap<String, String[]>();
requestParams.putAll(super.getParameterMap());
}
return Collections.unmodifiableMap(requestParams);
}
@Override
public Enumeration<String> getParameterNames() {
return Collections.enumeration(getParameterMap().keySet());
}
@Override
public String[] getParameterValues(final String name) {
return getParameterMap().get(name);
}
}
私のフィルターdoFilterメソッドでは:
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
final WrapperRequest wrappedRequest = new WrapperRequest(request);
Map<String, String[]> paramMap = wrappedRequest.getParameterMap();
chain.doFilter(wrappedRequest, response);
しかし、私は以下の警告を受けています
警告: URI へのサーブレット リクエストには、リクエスト ボディにフォーム パラメータが含まれていますが、リクエスト ボディは、リクエスト パラメータにアクセスするサーブレットまたはサーブレット フィルタによって消費されています。@FormParam を使用するリソース メソッドのみが期待どおりに機能します。他の方法でリクエスト本文を使用するリソース メソッドは、期待どおりに動作しません。
これをTomcatにデプロイしています。ヘルプ!