在tomcat中接收请求之前验证标头 [英] Verify header before request receive in tomcat
问题描述
在收到请求之前我需要验证标头。我发现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;
公共类ProcessingValve扩展ValveBase {
private static final Logger logger = Logger.getLogger(ProcessingValve.class.getName());
@Override
public void invoke(请求请求,响应响应)抛出IOException,
ServletException {
HttpServletRequest httpServletRequest = request.getRequest();
枚举< 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。
-
现在我使用标题点击我的网络服务:
期望:100-continue
但是在http命中没有调用这个配置和代码阀。如果有人知道为什么没有调用tomcat阀门请帮助。
server.xml
中的标签是案例敏感。
所以试试这个:
< ; Valve className =cz.ValveTest.ProcessingValve/>
I need verify header before receive the request. I found that tomcat valve can help in it. I follow these steps but valve is not called:
make a maven project and do this code in it.
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 and put jar inside tomcat/lib folder
add this line in server.xml
<valve className="cz.ValveTest.ProcessingValve"/>
restart tomcat.
Now I hit my web service with header:
Expect : 100-continue
but using this configuration and code valve is not called on http hit.If any one knew why tomcat valve is not called please help.
The tags in server.xml
are case sensitive.
So try this :
<Valve className="cz.ValveTest.ProcessingValve"/>
这篇关于在tomcat中接收请求之前验证标头的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!