0

ログイン情報を含むカスタム HTTP ヘッダーを play アプリケーション (play 1.2.5) に送信する必要があります。そのカスタム ヘッダーはフィルターによって追加されます。

問題は、読み込もうとすると、常にプレイが NullPointerException をスローすることです。

String loggedUser = request.headers.get("loggeduser").value();

テスト用のサーブレットもあります。以下は、ヘッダーから正しく値を出力します。

out.println(request.getHeader("loggeduser"));

私は遊びに何か欠けていますか?

ありがとう

編集:これは私のフィルターです

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    CustomHeaderWrapper wrapper = new CustomHeaderWrapper((HttpServletRequest) request);
    String username = ((HttpServletRequest) request).getRemoteUser();
    wrapper.addHeader("loggeduser", username);
    chain.doFilter(wrapper, response);
}

そしてCustomHeaderWrapper :

private Map<String, String> customHeaderMap = null;

public CustomHeaderWrapper(HttpServletRequest request) {
    super(request);
    customHeaderMap = new HashMap<String, String>();
}

@Override
public String getHeader(String name) {
    String header = super.getHeader(name);
    return (header != null) ? header : this.getParameter(name);
}

@Override
public Enumeration getHeaderNames() {
    List<String> names = Collections.list(super.getHeaderNames());
    names.addAll(Collections.list(super.getParameterNames()));
    return Collections.enumeration(names);
}

@Override
public String getParameter(String name) {
    String paramValue = super.getParameter(name); // query Strings
    if (paramValue == null) {
        paramValue = customHeaderMap.get(name);
    }
    return paramValue;
}

public void addHeader(String headerName, String headerValue) {
    customHeaderMap.put(headerName, headerValue);
}
4

1 に答える 1

1

小さなテスト プロジェクトを作成し、質問のコード行を使用しました。それは完全に機能します。Chrome 用のDev HTTP Clientプラグインを使用してヘッダーを設定しました。

すべてのヘッダーは、request.headersハッシュマップに追加される前に小文字に変換されることに注意してください。したがって、の"loggedUser"中に配置request.headers.get()すると、機能しません。

于 2013-01-16T20:26:54.687 に答える