在tomcat中接收请求之前验证标头 [英] Verify header before request receive in tomcat

查看:122
本文介绍了在tomcat中接收请求之前验证标头的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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


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



    }
    }


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


  3. 在server.xml中添加此行

     < valve className =cz.ValveTest.ProcessingValve/> 


  4. 重新启动tomcat。


  5. 现在我使用标题点击我的网络服务:


    期望: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:

  1. 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);  
    

    } }

  2. make jar and put jar inside tomcat/lib folder

  3. add this line in server.xml

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

  4. restart tomcat.

  5. 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆