如何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 + consul + upsync 完成动态负载均衡的方法详解
Mar 31 Servers
win10安装配置nginx的过程
Mar 31 Servers
阿里云Nginx配置https实现域名访问项目(图文教程)
Mar 31 Servers
Nginx 根据URL带的参数转发的实现
Apr 01 Servers
使用 Apache Superset 可视化 ClickHouse 数据的两种方法
Jul 07 Servers
关于nginx 实现jira反向代理的问题
Sep 25 Servers
使用Nginx搭载rtmp直播服务器的方法
Oct 16 Servers
nginx实现动静分离的方法示例
Nov 07 Servers
Win10 Anaconda安装python-pcl
Apr 29 Servers
聊聊配置 Nginx 访问与错误日志的问题
May 25 Servers
Nginx配置使用详解
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
让这部DC动画新作刷新你的认知
2020/03/03 欧美动漫
php4的session功能评述(三)
2006/10/09 PHP
PHP 时间转换Unix时间戳代码
2010/01/22 PHP
使用JSON实现数据的跨域传输的php代码
2011/12/20 PHP
对淘宝URL中ID提取的PHP代码
2013/09/01 PHP
php单态设计模式(单例模式)实例
2014/11/18 PHP
Thinkphp3.2.3整合phpqrcode生成带logo的二维码
2016/07/21 PHP
php生成网页桌面快捷方式
2017/05/05 PHP
Laravel 5.1 框架Blade模板引擎用法实例分析
2020/01/04 PHP
用roll.js实现的图片自动滚动+鼠标触动的特效
2007/03/18 Javascript
几个高效,简洁的字符处理函数
2007/04/12 Javascript
封装的原生javascript弹出层代码
2010/09/24 Javascript
利用json获取字符出现次数的代码
2012/03/22 Javascript
jquery仿京东导航/仿淘宝商城左侧分类导航下拉菜单效果
2013/04/24 Javascript
SOSO地图JS画出标注和中心点以html形式运行
2013/08/09 Javascript
javascript对下拉列表框(select)的操作实例讲解
2013/11/29 Javascript
我的Node.js学习之路(二)NPM模块管理
2014/07/06 Javascript
JavaScript中对象介绍
2014/12/31 Javascript
基于Vue.js实现数字拼图游戏
2016/08/02 Javascript
JS实现点击循环切换显示内容的方法
2017/10/19 Javascript
快速解决brew安装特定版本flow的问题
2018/05/17 Javascript
Python迭代用法实例教程
2014/09/08 Python
Python使用MONGODB入门实例
2015/05/11 Python
使用Python判断质数(素数)的简单方法讲解
2016/05/05 Python
python 3.3 下载固定链接文件并保存的方法
2018/12/18 Python
python读取csv文件指定行的2种方法详解
2020/02/13 Python
Spanx塑身衣官网:美国知名内衣品牌
2017/01/11 全球购物
C#笔试题
2015/07/14 面试题
this关键字的作用
2016/01/30 面试题
应届生求职推荐信
2013/10/28 职场文书
毕业求职自荐信格式是什么
2013/11/19 职场文书
单位单身证明样本
2014/10/11 职场文书
漂亮妈妈观后感
2015/06/08 职场文书
骆驼祥子读书笔记
2015/06/26 职场文书
标准演讲稿格式结尾应该怎么书写?
2019/07/17 职场文书
quickjs 封装 JavaScript 沙箱详情
2021/11/02 Javascript