在 tomcat 收到请求之前验证 header

Verify header before request receive in tomcat

我需要验证 header 才能收到请求。我发现 tomcat 阀门可以提供帮助。我按照这些步骤操作,但未调用阀门:

  1. 创建一个 maven 项目并在其中执行此代码。

    package cz.ValveTest;
    
    import java.io.IOException;
    import java.util.Enumeration;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    
    import org.apache.catalina.connector.Request;
    import org.apache.catalina.connector.Response;
    import org.apache.catalina.valves.ValveBase;
    
    public class ProcessingValve  extends ValveBase {
    
    private static final Logger logger = Logger.getLogger(ProcessingValve.class.getName());
    
    @Override
    public void invoke(Request request, Response response) throws IOException,
            ServletException {
    
    
    HttpServletRequest httpServletRequest = request.getRequest();
    
     Enumeration<String> headerNames = httpServletRequest.getHeaderNames();
     logger.info("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
    
    while (headerNames.hasMoreElements()) { String header = headerNames.nextElement(); logger.log(Level.INFO, "Header --> {0} Value --> {1}", new Object[]{header, httpServletRequest.getHeader(header)}); }
      getNext().invoke(request, response);  
    
    } }
  2. 制作 jar 并将 jar 放入 tomcat/lib 文件夹

  3. 在server.xml

    中添加这一行
    <valve className="cz.ValveTest.ProcessingValve"/>
    
  4. 重启tomcat.

  5. 现在我用 header:

    访问我的网络服务

    Expect : 100-continue

但使用此配置和代码 valve 未在 http 上调用 hit.If 任何人都知道为什么 tomcat valve 未被调用请帮助。

server.xml 中的标签区分大小写

所以试试这个:

<Valve className="cz.ValveTest.ProcessingValve"/>