在 tomcat 收到请求之前验证 header
Verify header before request receive in tomcat
我需要验证 header 才能收到请求。我发现 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);
}
}
制作 jar 并将 jar 放入 tomcat/lib 文件夹
在server.xml
中添加这一行
<valve className="cz.ValveTest.ProcessingValve"/>
重启tomcat.
现在我用 header:
访问我的网络服务
Expect : 100-continue
但使用此配置和代码 valve 未在 http 上调用 hit.If 任何人都知道为什么 tomcat valve 未被调用请帮助。
server.xml
中的标签区分大小写。
所以试试这个:
<Valve className="cz.ValveTest.ProcessingValve"/>
我需要验证 header 才能收到请求。我发现 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 {
while (headerNames.hasMoreElements()) { String header = headerNames.nextElement(); logger.log(Level.INFO, "Header --> {0} Value --> {1}", new Object[]{header, httpServletRequest.getHeader(header)}); }HttpServletRequest httpServletRequest = request.getRequest(); Enumeration<String> headerNames = httpServletRequest.getHeaderNames(); logger.info("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
} }getNext().invoke(request, response);
制作 jar 并将 jar 放入 tomcat/lib 文件夹
在server.xml
中添加这一行<valve className="cz.ValveTest.ProcessingValve"/>
重启tomcat.
现在我用 header:
访问我的网络服务Expect : 100-continue
但使用此配置和代码 valve 未在 http 上调用 hit.If 任何人都知道为什么 tomcat valve 未被调用请帮助。
server.xml
中的标签区分大小写。
所以试试这个:
<Valve className="cz.ValveTest.ProcessingValve"/>