欢迎来到代码驿站!

Tomcat

当前位置:首页 > 服务器 > Tomcat

Tomcat中使用ipv6地址的示例代码

时间:2023-02-06 10:30:34|栏目:Tomcat|点击:

在公司的一次项目改造过程中,需要将原来的IPV6替换成IPV4。查询资料资料之后,你会遇到如下问题,总结解决办法如下:

1、替换老版本Tomcat

tomcat6不支持监听ipv6 tomcat7支持监听ipv6 tomcat8支持监听ipv6

我们只需将tomcat换为7以上的版本即可!!!!!!!!!

2、项目无法启动

如果使用Tomcat 7以上的版本来替换老版本的Tomcat,那么问题来了你会无法启动项目。

错误日志:

26-Aug-2020 16:11:15.558[RMI TCP Connection(3)-127.0.0.1] org.apache.tomcat.util.descriptor.web.WebXmlParser.parseWebXml Parse error in application web.xml file at [file:/F:/Idea-Code/chuangjhx/out/artifacts/emp_std_192_169_1_81_war_exploded/WEB-INF/web.xml]
    java.io.FileNotFoundException: Could not resolve XML resource [user] with public ID [null], system ID [userConfig.xml] and base URI [file:/F:/Idea-Code/chuangjhx/out/artifacts/emp_std_192_169_1_81_war_exploded/WEB-INF/web.xml] to a known, local entity.

因为新版本的Tomcat无法解析你的web.xml

解决办法:

打开你的Tomcat的安装目录 找到conf目录下的context.xml

在** **中添加属性xmlBlockExternal,具体如:

<Context xmlBlockExternal="false">

3、Tomcat7拦截特殊字符

当你在服务期内使用ipv6地址进行下载或者跳转的时候,会出现如下错误

Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.
 java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
    at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:479)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:687)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:790)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1468)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:748)

这是因为

  • 根据rfc规范(RFC 3986规范定义了Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符(RFC3986中指定了以下字符为保留字符:! * ’ ( ) ; : @ & = + $ , / ? # [ ]))。
  • url中不允许有 |,{,}等特殊字符,但在实际生产中还是有些url有可能携带有这些字符,特别是|还是较为常见的。在tomcat升级到7以后,对url字符的检查都变严格了,如果出现这类字符,tomcat将直接返回400状态码。

解决办法(SpringBoot)

在你的启动类上添加

    @Bean
    public TomcatServletWebServerFactory webServerFactory() {
        TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
        factory.addConnectorCustomizers(new TomcatConnectorCustomizer() {
            @Override
            public void customize(Connector connector) {
                connector.setProperty("relaxedPathChars", "\"<>[\\]^`{|}");
                connector.setProperty("relaxedQueryChars", "\"<>[\\]^`{|}");
            }
        });
        return factory;
    }

解决办法(Tomcat)

打开你的Tomcat 的安装目录 找到conf目录下的server.xml ,作出如下修改:

<Connector port="8082" protocol="HTTP/1.1"
               connectionTimeout="20000"
               relaxedQueryChars="[]|{}^&#x5c;&#x60;&quot;&lt;&gt;"
               redirectPort="8443" />

4、设置IPV6的监听

想让你的tomcat即可以使用IPV4又可以使用IPV6访问,需要进行如下配置

打开打开你的Tomcat的安装目录 找到conf目录下的server.xml,作出如下修改:

 <Connector port="8080" protocol="HTTP/1.1"
    address="0.0.0.0"
               connectionTimeout="20000"
               relaxedQueryChars="[]|{}^&#x5c;&#x60;&quot;&lt;&gt;"
               redirectPort="8443" />
    <Connector port="8080" protocol="HTTP/1.1"
    address="[::]"
               connectionTimeout="20000"
               relaxedQueryChars="[]|{}^&#x5c;&#x60;&quot;&lt;&gt;"
               redirectPort="8443" />

上一篇:Tomcat进程占用CPU过高的解决方法

栏    目:Tomcat

下一篇:没有了

本文标题:Tomcat中使用ipv6地址的示例代码

本文地址:http://www.codeinn.net/misctech/225193.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有