2013-06-04 6 views
15

HttpServletRequestのコンテナ要求から属性方法があります。抽出要求はジャージー

setAttribute 
私は 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 
    } 
} 
+0

あなたがしたいことを示すいくつかのコード? –

+0

私の質問を編集しました。ありがとう! – Dejell

答えて

33

あなたがすることはできません。彼らは、ジャージーAPIを介して公開されていません。 Jerseyのコードベースを検索すると、HttpServletRequest.getAttributeNames()の使用はないことがわかります。これらのコードは、一括してコピーされた場合に使用されることが期待されます。また、HttpServletRequest.getAttribute()の利用方法はほんの一握りであり、厳密に内部簿記になっています。

ただし、Servlet Contextにデプロイした場合、JAX-RSでは@Context注釈を使用して元のHttpServletRequestを挿入できます。私はJerseyフィルタでこれを実行できるかどうかは不明ですが、MessageBodyReaders/Writersとリソースクラスで動作します。

アップデート:私がチェックした、とあなたは、実際には、単純に含めることによってジャージーContainerRequestFilterへのHttpServletRequestを注入することができます

@Context private HttpServletRequest httpRequest; 
+0

Jersey Filterに注入できますか? – Dejell

+0

はい。私の更新を参照してください。 –

+0

なぜJerseyは単純ではないHttpServletRequestを拡張しますか? – Dejell

3

私は@Context作業を得たが、問題があることである持っています私のContainerRequestFilterはシングルトンです。

私はカスタムjavax.servlet.Filterを実装し、HttpServletRequestを保存するにはThreadLocalを使用しなければなりませんでした。

0

私はコンテキストを追加することに加えて、以前の回答に私の解決策を追加したい:セッションから

@Context 
private HttpServletRequest httpRequest; 

あなたべきsetget属性は、Get:

httpRequest.getSession().setAttribute("businessId", "yourId"); 

がセット:

Object attribute = httpRequest.getSession().getAttribute("businessId"); 
関連する問題