繁体   English   中英

tomcat https 导致 request.getParameter 返回 null

[英]tomcat https cause request.getParameter return null

测试服务器使用centos 7和tomcat 9

最初,测试服务器 tomcat 使用http ,这个 tomcat 包含 4 个 web 应用程序: a.warb.warc.ward.war ,它工作正常,它的server.xml看起来像:

<Connector  
        port="80"
        protocol="HTTP/1.1"  
        connectionTimeout="60000" 
        keepAliveTimeout="15000"
        maxKeepAliveRequests="-1"
        maxThreads="1000"  
        minSpareThreads="200"  
        maxSpareThreads="300"
        minProcessors="100" 
        maxProcessors="900" 
        acceptCount="1000" 
        enableLookups="false"
        executor="tomcatThreadPool"
        maxPostSize="-1"
                
        compression="on"
        compressionMinSize="1024"
        redirectPort="443" />

然后我尝试通过keytoolhttps与自签名 ssl 一起使用:

<Connector 
        port="443" 
        protocol="HTTP/1.1"  
        minSpareThreads="5" 
        maxSpareThreads="75"    
        enableLookups="true" 
        disableUploadTimeout="true"      
        acceptCount="100"  
        maxThreads="200"                
        maxPostSize="-1"
        
        scheme="https" 
        secure="true"
        SSLEnabled="true"    
        clientAuth="false" 
        sslProtocol="TLS"    
        keystoreFile="/opt/test.keystore"      
        keystorePass="123456"/>

但是,登录后,我的 webapp 总是显示加载:

  1. 查了日志,发现有一个异常nullpointerexception因为request.getParameter('key')返回null(其实request.getParameterMap()request.getParameterNames()返回空),但是从浏览器网络来看,这个参数有已经送走了。
  2. 有时日志中没有任何错误,但是我的webapp仍然始终显示正在加载。

对于上面的#1,当登录成功时, a.war会向b.warc.ward.war发送请求,请求参数包括一个array(has 85 items and each item contains 7 fields)key

如果我从请求参数中删除array ,只保留请求参数key ,那么在 https 中不会总是显示加载。

检查 tomcat 文档后,我尝试更改 https connector protocol

如果我将protocolHTTP/1.1更改为org.apache.coyote.http11.Http11Nio2Protocol ,那么 https 没有任何问题,我也可以发送请求参数array

所以我不明白:

  1. 发送请求参数array(has 85 items and each item contains 7 fields)并使用HTTP/1.1协议在https key有时会导致request.getParameterMap()request.getParameterNames()返回空和request.getParameter('key')返回空值
  2. 为什么如果我使用协议HTTP/1.1https删除请求参数array ,那么它工作正常。
  3. 为什么使用HTTP/1.1协议的http没有任何问题
  4. 为什么在 https 中使用org.apache.coyote.http11.Http11Nio2Protocol可以解决我的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM