此内容没有您所选择的语言版本。

4.6. Create a Custom Valve


A Valve is a Java class that gets inserted into the request processing pipeline for an application before the application's servlet filters. This can be used to modify the request or perform any other behavior. This task demonstrates the basic steps required for implementing a valve.

Procedure 4.3. Create a Custom Valve

  1. Configure the Maven dependencies.

    Add the following dependency configuration to the project pom.xml file.
    <dependency>
      <groupId>org.jboss.web</groupId>
      <artifactId>jbossweb</artifactId>
      <version>7.5.7.Final-redhat-1</version>
      <scope>provided</scope>
    </dependency>

    Note

    The jbossweb-VERSION.jar file should not be included in the application. It is available to the JBoss EAP server runtime classpath as a JBoss module at this location: EAP_HOME/modules/system/layers/base/org/jboss/as/web/main/jbossweb-7.5.7.Final-redhat-1.jar.
  2. Create the Valve class

    Create a subclass of 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. Implement the invoke method.

    The invoke() method is called when this valve is executed in the pipeline. The request and response objects are passed as parameters. Perform any processing and modification of the request and response here.
    public void invoke(Request request, Response response)
    {
    
    }
  4. Invoke the next pipeline step.

    The last thing the invoke method must do is invoke the next step of the pipeline and pass the modified request and response objects along. This is done using the getNext().invoke() method
    getNext().invoke(request, response);
  5. Optional: Specify parameters.

    If the valve must be configurable, enable this by adding a parameter. Do this by adding an instance variable and a setter method for each parameter.
    private String restrictedUserAgents = null;
    
    public void setRestricteduserAgents(String mystring) 
    {
       this.restrictedUserAgents = mystring;
    }
  6. Review the completed code example.

    The class should now look like the following example.

    Example 4.4. Sample Custom Valve

    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

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.