2016-12-29 13 views
1

サーブレットAPIはServletRequestオブジェクトを受け入れGenericServlet定義、およびサブクラスそれHttpServletRequestを受け付けるHttpServletにあります。ただし、Filter.doFilterServletRequestのみを受け入れているようです。 HTTPリクエストに固有のフィルタクラスはありますか?そうでない場合サーブレットフィルタは: `のdoFilter(HttpServletRequestの)が`

  • なぜですか? HTTPはすべてのWebコンポーネントに共通する唯一のメソッドなので、サーブレットと同様にHTTP固有のフィルタを持つことは意味がありませんか?根拠は何ですか?
  • ServletRequestHttpServletRequestWrapperに渡すにはどうすればよいですか?私は手動でそれをダウンキャストしなければならないのですか、それともより適切な方法がありますか?
+2

関連:[HttpServletRequest/Response以外でjavax.servlet.Filter.doFilter(ServletRequest req、ServletResponse res)を呼び出すのはいつですか?](http://stackoverflow.com/questions/12350053/when-would- javax-servlet-filter-dofilterservletrequest-req-servletresponse-res) –

答えて

2

あなたはこの年齢のためにこれを望んでいるだけではありません。実際、これには合理的な根拠はありません。したがって、今後のServlet 4.0(Java EE 8の一部)はspec issue 141のようについにjavax.servlet.http.HttpFilterとなります。現在、implementedTomcat 9です。メソッドのシグネチャは次のとおりです。

protected void doFilter(HttpServletRequest request, 
         HttpServletResponse response, 
         FilterChain chain) 

はそれまで、あなたの最善の策はあなた自身をHttpFilterを焼くか、またはあなたがJSF + CDIベースのWebアプリケーションを使用するために起こる場合は、それを使用することができますので、open sourceである(OmniFaces HttpFilterをつかみます)自分で焼くためのインスピレーションとして、その次のシグネチャを持つことが起こる:

public void doFilter(HttpServletRequest request, 
        HttpServletResponse response, 
        HttpSession session, 
        FilterChain chain) 

それがまだ作成されていない場合sessionnullされます。あなたの二次の質問にとして

がどのように私はHttpServletRequestWrapperServletRequestを渡す必要がありますか?私は手動でそれをダウンキャストしなければならないのですか、それともより適切な方法がありますか?

ここでは、いくつかの現実世界のexapmlesについてexisting code snippetsをご覧ください。

関連する問題