4.6. カスタムバルブを作成する
バルブは、アプリケーションのサーブレットフィルターの前にアプリケーション用要求処理パイブラインに挿入される Java クラスです。これは、要求を変更または他の動作を実行するために使用できます。このタスクは、バルブを実装するのに必要な基本的な手順を示しています。
手順4.3 カスタムバルブを作成する
バルブクラスを作成する
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 { }呼び出しメソッドを実装する
invoke()メソッドは、このバルブがパイプラインで実行されるときに呼び出されます。要求オブジェクトと応答オブジェクトはパラメーターとして渡されます。ここで、要求と応答の処理と変更を行います。public void invoke(Request request, Response response) { }次のパイプラインステップを呼び出す
呼び出しメソッドが最後に実行する必要があることはパイプラインの次のステップを呼び出し、変更された要求オブジェクトと応答オブジェクトを渡すことです。これは、getNext().invoke()メソッドを使用して行われます。getNext().invoke(request, response);オプション: パラメーターを指定する
バルブを設定可能にする必要がある場合は、パラメーターを追加してこれを有効にします。これは、インスタンス変数と各パラメーターに対するセッターを追加して行います。private String restrictedUserAgents = null; public void setRestricteduseragents(String mystring) { this.restrictedUserAgents = mystring; }
例4.2 単純なカスタムバルブ
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);
}
}