在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阀门,请帮助。
【问题讨论】:
你把<valve>
元素放在server.xml文件的什么地方?
【参考方案1】:
server.xml
中的标签区分大小写。
所以试试这个:
<Valve className="cz.ValveTest.ProcessingValve"/>
【讨论】:
感谢现在每个 http 请求都会调用它以上是关于在tomcat中接收请求之前验证标头的主要内容,如果未能解决你的问题,请参考以下文章
Express 服务器无法接收 Angular HttpClient 发送的身份验证标头
使用 ASP.NET Core 在 POST 请求的标头中包含身份验证
从使用 Angular 7 的请求中接收 Spring Boot 中的空授权标头,但 Postman 工作正常