如何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优化的六点方法
Mar 31 Servers
Nginx的反向代理实例详解
Mar 31 Servers
Nginx Rewrite使用场景及配置方法解析
Apr 01 Servers
OpenStack虚拟机快照和增量备份实现方法
Apr 04 Servers
HDFS免重启挂载新磁盘
Apr 06 Servers
Nginx禁止ip访问或非法域名访问
Apr 07 Servers
Nginx+Tomcat负载均衡多实例详解
Apr 11 Servers
Windows Server 2008 修改远程登录端口以及配置防火墙
Apr 28 Servers
KVM基础命令详解
Apr 30 Servers
nginx配置限速限流基于内置模块
May 02 Servers
Apache SeaTunnel实现 非CDC数据抽取
May 20 Servers
windows server 2012安装FTP并配置被动模式指定开放端口
Jun 10 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/10/09 PHP
php str_pad 函数用法简介
2009/07/11 PHP
Laravel 关联模型-关联新增和关联更新的方法
2019/10/10 PHP
javascript 隐藏/显示指定的区域附HTML元素【legend】用法
2010/03/05 Javascript
最佳6款用于移动网站开发的jQuery 图片滑块插件小结
2012/07/20 Javascript
JavaScript高级程序设计(第3版)学习笔记11 内建js对象
2012/10/11 Javascript
jquery实现标题字体变换的滑动门菜单效果
2015/09/07 Javascript
跟我学习javascript的定时器
2015/11/19 Javascript
js文本框输入内容智能提示效果
2015/12/02 Javascript
javascript之with的使用(阿里云、淘宝使用代码分析)
2016/10/11 Javascript
微信小程序 引用其他js文件实现代码
2017/02/22 Javascript
javascriptvoid(0)含义以及与&quot;#&quot;的区别讲解
2019/01/19 Javascript
Python解析excel文件存入sqlite数据库的方法
2016/11/15 Python
Python表示矩阵的方法分析
2017/05/26 Python
JSONLINT:python的json数据验证库实例解析
2017/11/28 Python
Python实现控制台中的进度条功能代码
2017/12/22 Python
python单线程文件传输的实例(C/S)
2019/02/13 Python
浅析Python与Mongodb数据库之间的操作方法
2019/07/01 Python
解决pycharm 工具栏Tool中找不到Run manager.py Task的问题
2019/07/01 Python
如何将你的应用迁移到Python3的三个步骤
2019/12/22 Python
Django 项目布局方法(值得推荐)
2020/03/22 Python
css3之UI元素状态伪类选择器实例演示
2017/08/11 HTML / CSS
HTML5 script元素async、defer异步加载使用介绍
2013/08/23 HTML / CSS
英国复古皮包品牌:Beara Beara
2018/07/18 全球购物
自主招生自荐信范文
2013/12/04 职场文书
幼儿园校车司机的岗位职责
2014/01/30 职场文书
学习决心书范文
2014/03/11 职场文书
小学六年级学生评语
2014/04/22 职场文书
财务人员担保书
2014/05/13 职场文书
民政局办理协议离婚(范本)
2014/10/25 职场文书
2015年幼儿教师个人工作总结
2015/05/20 职场文书
就业推荐表院系意见
2015/06/05 职场文书
企业宣传稿范文
2015/07/23 职场文书
2016年清明节寄语
2015/12/04 职场文书
教你漂亮打印Pandas DataFrames和Series
2021/05/29 Python
Python 如何利用ffmpeg 处理视频素材
2021/11/27 Python