如何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开启Brotli压缩算法实现过程详解
Mar 31 Servers
详解nginx.conf 中 root 目录设置问题
Apr 01 Servers
nginx限制并发连接请求数的方法
Apr 01 Servers
Apache Calcite 实现方言转换的代码
Apr 24 Servers
Nginx图片服务器配置之后图片访问404的问题解决
Mar 21 Servers
基于Apache Hudi在Google云构建数据湖平台的思路详解
Apr 07 Servers
CentOS7安装GlusterFS集群以及相关配置
Apr 12 Servers
搭建Yolov5服务器
Apr 30 Servers
nginx 配置指令之location使用详解
May 25 Servers
Nginx静态压缩和代码压缩提高访问速度详解
May 30 Servers
Nginx本地配置SSL访问的实例教程
May 30 Servers
Docker部署Mysql8的实现步骤
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
PL-880隐藏功能
2021/03/01 无线电
thinkphp3.0 模板中函数的使用
2012/11/13 PHP
浅析echo(),print(),print_r(),return之间的区别
2013/11/27 PHP
PHP数组与对象之间使用递归实现转换的方法
2015/06/24 PHP
3种php生成唯一id的方法
2015/11/23 PHP
给PHP开发者的编程指南 第一部分降低复杂程度
2016/01/18 PHP
jQuery 扩展对input的一些操作方法
2009/10/30 Javascript
小议Javascript中的this指针
2010/03/18 Javascript
jQuery的.live()和.die() 使用介绍
2011/09/10 Javascript
jquery focus(fn),blur(fn)方法实例代码
2011/12/16 Javascript
connect中间件session、cookie的使用方法分享
2014/06/17 Javascript
js使用for循环查询数组中是否存在某个值
2014/08/12 Javascript
JavaScript前补零操作实例
2015/03/11 Javascript
深入浅析JavaScript中对事件的三种监听方式
2015/09/29 Javascript
详解Wondows下Node.js使用MongoDB的环境配置
2016/03/01 Javascript
js实现ctrl+v粘贴上传图片(兼容chrome、firefox、ie11)
2016/03/09 Javascript
JavaScript登录验证码的实现
2016/10/27 Javascript
JS基于递归实现倒计时效果的方法
2016/11/26 Javascript
Javascript中字符串replace方法的第二个参数探究
2016/12/05 Javascript
jQuery实现在HTML文档加载完毕后自动执行某个事件的方法
2017/05/08 jQuery
详解.vue文件中监听input输入事件(oninput)
2017/09/19 Javascript
js实现动态改变radio状态的方法
2018/02/28 Javascript
js实现图片实时时钟
2020/01/15 Javascript
vue 实现根据data中的属性值来设置不同的样式
2020/08/04 Javascript
python 递归遍历文件夹,并打印满足条件的文件路径实例
2017/08/30 Python
Python自定义线程类简单示例
2018/03/23 Python
Python中实例化class的执行顺序示例详解
2018/10/14 Python
程序员的七夕用30行代码让Python化身表白神器
2019/08/07 Python
tensorflow-gpu安装的常见问题及解决方案
2020/01/20 Python
Python安装依赖(包)模块方法详解
2020/02/14 Python
python pip如何手动安装二进制包
2020/09/30 Python
班子群众路线教育实践个人对照检查材料思想汇报
2014/09/30 职场文书
银行求职信范文
2019/05/13 职场文书
python geopandas读取、创建shapefile文件的方法
2021/06/29 Python
Element-ui Layout布局(Row和Col组件)的实现
2021/12/06 Vue.js
如何Python使用re模块实现okenizer
2022/04/30 Python