如何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如何将http访问的网站改成https访问
Mar 31 Servers
Nginx tp3.2.3 404问题解决方案
Mar 31 Servers
详解nginx进程锁的实现
Jun 14 Servers
Rhit高效可视化Nginx日志查看工具
Nov 01 Servers
Nginx下SSL证书安装部署步骤介绍
Dec 06 Servers
Apache Pulsar结合Hudi构建Lakehouse方案分析
Mar 31 Servers
Linux中如何安装并部署Redis
Apr 18 Servers
Windows server 2012 R2 安装IIS服务器
Apr 29 Servers
聊聊配置 Nginx 访问与错误日志的问题
May 25 Servers
Docker与K8s关系介绍不会Docker也可以使用K8s
Jun 25 Servers
Zabbix对Kafka topic积压数据监控的解决方案
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调用Java对象的方法
2006/10/09 PHP
PHP合并两个数组的两种方式的异同
2012/09/14 PHP
解析PHP中的内存管理,PHP动态分配和释放内存
2013/06/28 PHP
php将HTML表格每行每列转为数组实现采集表格数据的方法
2015/04/03 PHP
Symfony模板的快捷变量用法实例
2016/03/17 PHP
PHP实现限制IP访问的方法
2017/04/20 PHP
javascript eval函数深入认识
2009/02/21 Javascript
js弹出的对话窗口永远保持居中显示
2012/12/15 Javascript
jquery 插件开发 extjs中的extend用法小结
2013/01/04 Javascript
用js实现小球的自由移动代码
2013/04/22 Javascript
html5 canvas js(数字时钟)实例代码
2013/12/23 Javascript
jQuery中复合属性选择器用法实例
2014/12/31 Javascript
jQuery鼠标经过方形图片切换成圆边效果代码分享
2015/08/20 Javascript
深入分析Javascript事件代理
2016/01/30 Javascript
JavaScript学习笔记之创建对象
2016/03/25 Javascript
JS控制静态页面之间传递参数获取参数并应用的简单实例
2016/08/10 Javascript
详解VueRouter进阶之导航钩子和路由元信息
2017/09/13 Javascript
Popup弹出框添加数据实现方法
2017/10/27 Javascript
javascript trie前缀树的示例
2018/01/29 Javascript
vue+element实现批量删除功能的示例
2018/02/28 Javascript
移动端自适应flexible.js的使用方法(不用三大框架,仅写一个单html页面使用)推荐
2019/04/02 Javascript
JavaScript实现原型封装轮播图
2020/12/27 Javascript
Python基本语法经典教程
2016/03/11 Python
Django用户认证系统 User对象解析
2019/08/02 Python
Python3.7实现验证码登录方式代码实例
2020/02/14 Python
python boto和boto3操作bucket的示例
2020/10/30 Python
HTML5 source标签:媒介元素定义媒介资源
2018/01/29 HTML / CSS
英国手机壳购买网站:Case Hut
2019/04/11 全球购物
迎新晚会邀请函
2014/02/01 职场文书
文明寝室标语
2014/06/13 职场文书
2014年医德医风工作总结
2014/11/13 职场文书
自主招生学校推荐信范文
2015/03/26 职场文书
货款欠条范本
2015/07/03 职场文书
《蜜蜂引路》教学反思
2016/02/22 职场文书
企业管理不到位检讨书
2019/06/27 职场文书
《西游记》读后感(3篇)
2019/09/20 职场文书