首页 文章

在tomcat中接收请求之前验证标头

提问于
浏览
1

在收到请求之前我需要验证头 . 我发现tomcat阀门可以帮助它 . 我按照这些步骤但没有调用阀门:

  • 制作一个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);  
 

}
}
  • make jar并将jar放在tomcat / lib文件夹中

  • 在server.xml中添加此行

<valve className="cz.ValveTest.ProcessingValve"/>
  • 重启tomcat .

  • 现在我用 Headers 点击我的网络服务:

期待:100-继续

但是使用这个配置和代码阀没有在http命中调用 . 如果有人知道为什么没有调用tomcat阀门请帮忙 .

1 回答

  • 1

    server.xml 中的标签是 case sensitive .

    所以试试这个:

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

相关问题