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

Posted

技术标签:

【中文标题】在tomcat中接收请求之前验证标头【英文标题】:Verify header before request receive in tomcat 【发布时间】:2016-03-18 03:36:30 【问题描述】:

我需要在收到请求之前验证标头。我发现tomcat阀门可以帮助它。我按照以下步骤操作,但不调用阀门:

    制作一个 maven 项目并在其中执行此代码。

    包 cz.ValveTest; 导入 java.io.IOException; 导入 java.util.Enumeration; 导入 java.util.logging.Level; 导入 java.util.logging.Logger; 导入 javax.servlet.ServletException; 导入 javax.servlet.http.HttpServletRequest; 导入 org.apache.catalina.connector.Request; 导入 org.apache.catalina.connector.Response; 导入 org.apache.catalina.valves.ValveBase; 公共类 ProcessingValve 扩展 ValveBase private static final Logger logger = Logger.getLogger(ProcessingValve.class.getName()); @覆盖 公共无效调用(请求请求,响应响应)抛出 IOException, Servlet异常
    HttpServletRequest httpServletRequest = request.getRequest();
    
     Enumeration<String> headerNames = httpServletRequest.getHeaderNames();
     logger.info("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
    
    而(headerNames.hasMoreElements()) 字符串头 = headerNames.nextElement(); logger.log(Level.INFO, "Header --> 0 Value --> 1", new Object[]header, httpServletRequest.getHeader(header));
      getNext().invoke(request, response);  
    

    制作jar并将jar放入tomcat/lib文件夹中

    在 server.xml 中添加这一行

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

    重启tomcat。

    现在我用标题访问我的网络服务:

    期望:100-继续

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

【问题讨论】:

你把&lt;valve&gt;元素放在server.xml文件的什么地方? 【参考方案1】:

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

所以试试这个:

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

【讨论】:

感谢现在每个 http 请求都会调用它

以上是关于在tomcat中接收请求之前验证标头的主要内容,如果未能解决你的问题,请参考以下文章

Express 服务器无法接收 Angular HttpClient 发送的身份验证标头

服务端接收不到ajax post请求的参数

使用 ASP.NET Core 在 POST 请求的标头中包含身份验证

从使用 Angular 7 的请求中接收 Spring Boot 中的空授权标头,但 Postman 工作正常

授权标头未在后端 Angular 2 + Spring Boot 中接收

如何在将请求传递给上游服务器之前删除 Nginx 中的客户端标头?