4

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にデプロイしています。ヘルプ!

4

2 に答える 2

4

REST フレームワークに Jersey を使用していると思いますか?

これは基本的に、サーブレットが Request オブジェクトを構築したため、ジャージーはフォームパラメーターとクエリ文字列パラメーターの違いを認識できないと言っていると思います。

詳細については、https ://issues.apache.org/jira/browse/STANBOL-437 を参照してください。

これは疑問を投げかけます - これは実際に問題を引き起こしているのでしょうか、それとも単に警告メッセージが気になるのでしょうか?

于 2013-05-31T03:06:42.063 に答える