3

次のようなフィルターがあります。

   <filter>
      <filter-name>TestFilter</filter-name>
      <filter-class>org.TestFilter</filter-class>
      <init-param>
         <param-name>timeout</param-name>
         <param-value>30</param-value>
      </init-param>
   </filter>

ServletFilter と Servlets について話しているので。基本的に、私はすでにサーブレットにいて、doFilter の最初の部分を実行しています。したがって、コンテナーは init-parameter を認識している必要があります。Filter クラスを変更するアクセス権がありません。

指定された HttpServletRequest オブジェクトの init-parameter 値を取得することは可能ですか?

私が考えることができる唯一の解決策は、web.xml をリソースとして読み取り、値を手動で見つけようとすることです。しかし、より良い解決策があるように感じます。

4

2 に答える 2

8

そもそもなぜサーブレットでそれが必要なのですか? フィルター パラメーターはフィルターに属します。オプションは次のとおりです。

  1. 上記のパラメーターをコンテキスト初期化パラメーターに移動します。フィルターとサーブレットの両方からアクセスできます。
  2. フィルターの doFilter メソッドで、(要求に応じて) パラメーター値で属性を設定し、サーブレットに読み取らせます。

コンテキスト パラメータの例。

web.xml:

  <context-param>
    <param-name>param1</param-name>
    <param-value>value</param-value>
  </context-param>

あなたのコード:

String paramValue = getServletContext().getInitParameter("param1");

フィルターは、次を使用して同じパラメーター値にアクセスできます。

String paramValue = filterConfig.getServletContext().getInitParameter("param1");
于 2009-09-22T17:10:30.387 に答える
1

フィルターが final と宣言されていない場合は、フィルターを拡張できます。例えば、

public class MyFilter extends TheirFilter {
    public void init(javax.servlet.FilterConfig filterConfig) 
        throws javax.servlet.ServletException {
        super(filterConfig);
        // Retrieve the parameter here
    }
}

次に、web.xml を変更して、フィルタ クラスを独自のものに変更します。

于 2009-09-22T20:47:39.070 に答える