如何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
win10安装配置nginx的过程
Mar 31 Servers
Nginx本地目录映射实现代码实例
Mar 31 Servers
使用nginx配置访问wgcloud的方法
Jun 26 Servers
Windows下用Nginx配置https服务器及反向代理的问题
Sep 25 Servers
Nginx下SSL证书安装部署步骤介绍
Dec 06 Servers
配置Kubernetes外网访问集群
Mar 31 Servers
nginx实现多geoserver服务的负载均衡
May 15 Servers
Nginx利用Logrotate实现日志分割
May 20 Servers
docker 制作mysql镜像并自动安装
May 20 Servers
windows系统搭建WEB服务器详细教程
Aug 05 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使用DirectoryIterator显示下拉文件列表的方法
2015/03/13 PHP
IIS 7.5 asp Session超时时间设置方法
2017/04/17 PHP
php 使用curl模拟ip和来源进行访问的实现方法
2017/05/02 PHP
基于jQuery的Spin Button自定义文本框数值自增或自减
2010/07/17 Javascript
javascript当中的代码嗅探扩展原生对象和原型(prototype)
2013/01/11 Javascript
图片上传判断及预览脚本的效果实例
2013/08/07 Javascript
基于jquery插件实现常见的幻灯片效果
2013/11/01 Javascript
JavaScript静态类型检查工具FLOW简介
2015/01/06 Javascript
JavaScript Length 属性的总结
2015/11/02 Javascript
javascript实现瀑布流加载图片原理
2016/02/02 Javascript
JavaScript中关键字 in 的使用方法详解
2016/10/17 Javascript
jQuery实现的仿百度,仿谷歌搜索下拉框效果示例
2016/12/30 Javascript
详述 Sublime Text 打开 GBK 格式中文乱码的解决方法
2017/10/26 Javascript
JS抛物线动画实例制作
2018/02/24 Javascript
nodejs检测因特网是否断开的解决方案
2019/04/17 NodeJs
layer关闭弹出窗口触发表单提交问题的处理方法
2019/09/25 Javascript
浅谈vue生命周期共有几个阶段?分别是什么?
2020/08/07 Javascript
nodejs中的异步编程知识点详解
2021/01/17 NodeJs
Python守护进程用法实例分析
2015/06/04 Python
在Python中使用正则表达式的方法
2015/08/13 Python
Python 内置函数memoryview(obj)的具体用法
2017/11/23 Python
Python语言描述KNN算法与Kd树
2017/12/13 Python
python的scipy实现插值的示例代码
2019/11/12 Python
Python统计文本词汇出现次数的实例代码
2020/02/27 Python
win10下python3.8的PIL库安装过程
2020/06/08 Python
keras读取h5文件load_weights、load代码操作
2020/06/12 Python
酒店行政人事部经理职务说明书
2014/02/26 职场文书
学雷锋演讲稿汇总
2014/05/10 职场文书
担保书格式
2015/01/20 职场文书
安全主题班会教案
2015/08/12 职场文书
《孙子兵法》:欲成大事者,需读懂这些致胜策略
2019/08/23 职场文书
微信小程序和php的登录实现
2021/04/01 PHP
世界各国短波电台对东亚播送时间频率表(SW)
2021/06/28 无线电
opencv检测动态物体的实现
2021/07/21 Python
JavaScript执行机制详细介绍
2021/12/06 Javascript
python套接字socket通信
2022/04/01 Python