如何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配置ssl实现https的方法示例
Mar 31 Servers
nginx基于域名,端口,不同IP的虚拟主机设置的实现
Mar 31 Servers
Nginx + consul + upsync 完成动态负载均衡的方法详解
Mar 31 Servers
nginx安装以及配置的详细过程记录
Sep 15 Servers
Nginx+Windows搭建域名访问环境的操作方法
Mar 17 Servers
nginx共享内存的机制详解
Mar 21 Servers
Nginx禁止ip访问或非法域名访问
Apr 07 Servers
CentOS7安装GlusterFS集群以及相关配置
Apr 12 Servers
Windows10安装Apache2.4的方法步骤
Jun 25 Servers
Apache Kafka 分区重分配的实现原理解析
Jul 15 Servers
Nginx如何限制IP访问只允许特定域名访问
Jul 23 Servers
ssh服务器拒绝了密码 请再试一次已解决(亲测有效)
Aug 14 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
第十三节--对象串行化
2006/11/16 PHP
PHP中foreach循环中使用引用要注意的地方
2011/01/02 PHP
php多层数组与对象的转换实例代码
2013/08/05 PHP
编写PHP脚本过滤用户上传的图片
2015/07/03 PHP
PHP简单验证码功能机制实例详解
2019/03/27 PHP
JQuery Dialog(JS 模态窗口,可拖拽的DIV)
2010/02/07 Javascript
javascript 实现 原路返回
2015/01/21 Javascript
图文详解JavaScript的原型对象及原型链
2016/08/02 Javascript
为jQuery-easyui的tab组件添加右键菜单功能的简单实例
2016/10/10 Javascript
如何学JavaScript?前辈的经验之谈
2016/12/28 Javascript
折叠菜单及选择器的运用
2017/02/03 Javascript
基于Vue实现tab栏切换内容不断实时刷新数据功能
2017/04/13 Javascript
Angular4学习笔记之准备和环境搭建项目
2017/08/01 Javascript
JS中定位 position 的使用实例代码
2017/08/06 Javascript
hammer.js实现图片手势放大效果
2017/08/29 Javascript
node 利用进程通信实现Cluster共享内存
2017/10/27 Javascript
JS实现json对象数组按对象属性排序操作示例
2018/05/18 Javascript
解决jquery的ajax调取后端数据成功却渲染失败的问题
2018/08/08 jQuery
Vue props 单向数据流的实现
2018/11/06 Javascript
使用Vue开发自己的Chrome扩展程序过程详解
2019/06/21 Javascript
vue路由传参的基本实现方式小结【三种方式】
2020/02/05 Javascript
从零学python系列之数据处理编程实例(一)
2014/05/22 Python
在IIS服务器上以CGI方式运行Python脚本的教程
2015/04/25 Python
Python实现程序的单一实例用法分析
2015/06/03 Python
python+opencv实现霍夫变换检测直线
2020/10/23 Python
python os.path.isfile()因参数问题判断错误的解决
2019/11/29 Python
详解tf.device()指定tensorflow运行的GPU或CPU设备实现
2021/02/20 Python
用纯css3实现的图片放大镜特效效果非常不错
2014/09/02 HTML / CSS
纯CSS3实现的井字棋游戏
2020/11/25 HTML / CSS
Draper James官网:知名演员瑞茜·威瑟斯彭所创品牌
2017/10/25 全球购物
英国Boots旗下太阳镜网站:Boots Designer Sunglasses
2018/07/07 全球购物
民族团结先进个人材料
2014/02/05 职场文书
音乐教师求职信
2014/06/28 职场文书
医德医风个人总结
2015/02/28 职场文书
2016年师德先进个人事迹材料
2016/02/29 职场文书
opencv-python图像配准(匹配和叠加)的实现
2021/06/23 Python