26

HttpServletRequestメソッドがありsetAttribute(String, Object)ます。

からこの属性を抽出するにはどうすればよいContainterRequestですか?

見つかりませんでした:getAttributeメソッド!

コード

public class AuthenticationFilter implements Filter {
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest httpReq = (HttpServletRequest) servletRequest;
        // .... ....
        httpReq.setAttribute("businessId", businessId);
    }
}

ジャージー フィルターの場合:

private class Filter implements ResourceFilter, ContainerRequestFilter {
    public ContainerRequest filter(ContainerRequest request) {
        // ..extract the attribute from the httpReq
    }
}
4

4 に答える 4

47

できません。これらは、Jersey API を通じて公開されることはありません。HttpServletRequest.getAttributeNames()Jersey のコードベースを検索すると、大量にコピーされた場合に使用されると予想されるの使用がないことがわかります。HttpServletRequest.getAttribute()また、 の用途はほんの一握りであり、厳密には社内簿記用であることもわかります。

ただし、サーブレット コンテキストにデプロイされた場合、JAX-RS では、@Contextアノテーションを使用して元の HttpServletRequest を注入できることに注意してください。これを Jersey フィルターで実行できるかどうかはわかりませんが、MessageBodyReaders/Writers およびリソース クラスで機能します。

更新:確認しましたが、実際には、次を含めるだけで HttpServletRequest を Jersey ContainerRequestFilter に挿入できます。

@Context private HttpServletRequest httpRequest;
于 2013-06-09T13:32:32.383 に答える
4

私はうまくいきました@Contextが、問題は私ContainerRequestFilterがシングルトンであることです。

カスタムを実装し、javax.servlet.Filterを使用してThreadLocalを保存する必要がありましたHttpServletRequest

于 2014-08-24T12:42:23.133 に答える