如何Tomcat中使用ipv6地址


Posted in Servers onMay 06, 2022

在公司的一次项目改造过程中,需要将原来的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中使用ipv6地址的示例代码的文章就介绍到这了!


Tags in this post...

Servers 相关文章推荐
阿里云Nginx配置https实现域名访问项目(图文教程)
Mar 31 Servers
Nginx配置https原理及实现过程详解
Mar 31 Servers
使用goaccess分析nginx日志的详细方法
Jul 09 Servers
Nginx+Tomcat负载均衡集群的实现示例
Oct 24 Servers
Nginx图片服务器配置之后图片访问404的问题解决
Mar 21 Servers
nginx共享内存的机制详解
Mar 21 Servers
Apache Hudi的多版本清理服务彻底讲解
Mar 31 Servers
tomcat的catalina.out日志按自定义时间格式进行分割的操作方法
Apr 02 Servers
Linux中如何安装并部署Redis
Apr 18 Servers
鲲鹏 CentOS 7 安装Python3.7
May 11 Servers
Tomcat 与 maven 的安装与使用教程
Jun 16 Servers
kubernetes集群搭建Zabbix监控平台的详细过程
Jul 07 Servers
Tomcat弱口令复现及利用
Vscode中SSH插件如何远程连接Linux
nginx配置限速限流基于内置模块
May 02 #Servers
Nginx配置之禁止指定IP访问
centos7安装mysql5.7经验记录
May 02 #Servers
使用 Docker Compose 构建复杂的多容器App
Apr 30 #Servers
搭建Yolov5服务器
You might like
php 常用字符串函数总结
2008/03/15 PHP
PHP 面向对象 PHP5 中的常量
2010/05/05 PHP
PHP中防止直接访问或查看或下载config.php文件的方法
2012/07/07 PHP
php中设置index.php文件为只读的方法
2013/02/06 PHP
如何给phpcms v9增加类似于phpcms 2008中的关键词表
2013/07/01 PHP
解析array splice的移除数组中指定键的值,返回一个新的数组
2013/07/02 PHP
thinkphp连贯操作实例分析
2014/11/22 PHP
学习YUI.Ext第五日--做拖放Darg&amp;Drop
2007/03/10 Javascript
解javascript 混淆加密收藏
2009/01/16 Javascript
jQuery Jcrop插件实现图片选取功能
2011/11/23 Javascript
js从10种颜色中随机取色实现每次取出不同的颜色
2013/10/23 Javascript
简单的两种Extjs formpanel加载数据的方式
2013/11/09 Javascript
js+jquery常用知识点汇总
2015/03/03 Javascript
Angular.js如何从PHP读取后台数据
2016/03/24 Javascript
基于jQuery实现Ajax验证用户名是否存在实例
2016/03/30 Javascript
jQuery插件扩展实例【添加回调函数】
2016/11/26 Javascript
JavaScript判断浏览器及其版本信息
2017/01/20 Javascript
JS中常用的消息框总结
2018/02/24 Javascript
Vue2 轮播图slide组件实例代码
2018/05/31 Javascript
electron实现静默打印的示例代码
2019/08/12 Javascript
深入理解 TypeScript Reflect Metadata
2019/12/12 Javascript
python迭代器实例简析
2014/09/25 Python
实例说明Python中比较运算符的使用
2015/05/13 Python
python实现在字符串中查找子字符串的方法
2015/07/11 Python
Django返回json数据用法示例
2016/09/18 Python
Flask框架的学习指南之开发环境搭建
2016/11/20 Python
分享一下如何编写高效且优雅的 Python 代码
2017/09/07 Python
Python中max函数用于二维列表的实例
2018/04/03 Python
美国最大网上鞋店:Zappos
2016/07/25 全球购物
美国一站式电动和手动工具商店:International Tool
2020/11/26 全球购物
Nike俄罗斯官方网站:Nike RU
2021/03/05 全球购物
大学生就业自我推荐信
2014/05/10 职场文书
2014年圣诞节寄语
2014/12/08 职场文书
农民工工资保障承诺书
2015/05/04 职场文书
pytorch中的model.eval()和BN层的使用
2021/05/22 Python
不想升级Win11?教你彻底锁定老版Windows系统的方法(附下载地址)
2022/09/23 数码科技