検索

4.6. カスタムバルブを作成する

download PDF
Valve は、アプリケーションのサーブレットがフィルタリングする前に、アプリケーションの要求処理パイプラインに挿入される Java クラスです。これを使用して、リクエストを変更したり、その他の動作を実行したりできます。このタスクは、バルブを実装するために必要な基本的な手順を示しています。

手順4.3 カスタムバルブを作成する

  1. Maven の依存関係を設定します。

    次の依存関係設定をプロジェクト pom.xml ファイルに追加します。
    <dependency>
      <groupId>org.jboss.web</groupId>
      <artifactId>jbossweb</artifactId>
      <version>7.5.7.Final-redhat-1</version>
      <scope>provided</scope>
    </dependency>
    注記
    jbossweb -VERSION.jar ファイルをアプリケーションに含めないでください。これは、JBoss EAP サーバーのランタイムクラスパスで JBoss モジュールとして次の場所で利用できます: EAP_HOME/modules/system/layers/base/org/jboss/as/web/main/jbossweb-7.5.7.Final-redhat-1。jar
  2. Valve クラスを作成します

    のサブクラスを作成しますorg.apache.catalina.valves.ValveBase
    package org.jboss.samplevalves;
    
    import org.apache.catalina.valves.ValveBase;
    import org.apache.catalina.connector.Request;
    import org.apache.catalina.connector.Response;
    
    public class RestrictedUserAgentsValve extends ValveBase {
    
    }
  3. invoke メソッドを実装します。

    Theinvoke()このバルブがパイプラインで実行されると、メソッドが呼び出されます。リクエストオブジェクトとレスポンスオブジェクトはパラメーターとして渡されます。ここで、要求と応答の処理と変更を実行します。
    public void invoke(Request request, Response response)
    {
    
    }
  4. 次のパイプラインステップを呼び出します。

    invoke メソッドが最後に実行する必要があるのは、パイプラインの次のステップを呼び出して、変更された要求オブジェクトと応答オブジェクトを渡すことです。これは、getNext().invoke()方法
    getNext().invoke(request, response);
  5. オプション: パラメーターを指定します。

    バルブを設定可能にする必要がある場合は、パラメーターを追加してこれを有効にします。これを行うには、各パラメーターにインスタンス変数とセッターメソッドを追加します。
    private String restrictedUserAgents = null;
    
    public void setRestricteduserAgents(String mystring) 
    {
       this.restrictedUserAgents = mystring;
    }
  6. 完成したコード例を確認します。

    これで、クラスは次の例のようになります。

    例4.4 サンプルカスタムバルブ

    package org.jboss.samplevalves;
    
    import java.io.IOException;
    import java.util.regex.Pattern;
    
    import javax.servlet.ServletException;
    import org.apache.catalina.valves.ValveBase;
    import org.apache.catalina.connector.Request;
    import org.apache.catalina.connector.Response;
    
    public class RestrictedUserAgentsValve extends ValveBase 
    {
        private String restrictedUserAgents = null;
    
        public void setRestrictedUserAgents(String mystring) 
        {
            this.restrictedUserAgents = mystring;
        }
    
        public void invoke(Request request, Response response) throws IOException, ServletException 
        {
          String agent = request.getHeader("User-Agent");
          System.out.println("user-agent: " + agent + " : " + restrictedUserAgents);
          if (Pattern.matches(restrictedUserAgents, agent)) 
          {
             System.out.println("user-agent: " + agent + " matches: " + restrictedUserAgents);
             response.addHeader("Connection", "close");
          }
          getNext().invoke(request, response);
        }
    }
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.