如何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 根据URL带的参数转发的实现
Apr 01 Servers
Rhit高效可视化Nginx日志查看工具
Nov 01 Servers
nginx搭建NFS网络文件系统
Apr 14 Servers
Windows Server 2008 修改远程登录端口以及配置防火墙
Apr 28 Servers
Windows server 2012搭建FTP服务器
Apr 29 Servers
如何开启Apache,Nginx和IIS服务器的GZIP压缩功能
Apr 29 Servers
centos7安装mysql5.7经验记录
May 02 Servers
鲲鹏 CentOS 7 安装Python3.7
May 11 Servers
服务器间如何实现文件共享
May 20 Servers
超越Nginx的Web服务器caddy优雅用法
Jun 21 Servers
服务器SVN搭建图文安装过程
Jun 21 Servers
Windows server 2016服务器基本设置
Aug 14 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调用微博接口实现微博登录的方法示例
2018/09/22 PHP
jquery必须知道的一些常用特效方法及使用示例(整理)
2013/06/24 Javascript
JS操作Cookie写入和读取实例代码
2013/10/20 Javascript
JavaScript中的原型和继承详解(图文)
2014/07/18 Javascript
IE浏览器不支持getElementsByClassName的解决方法
2014/08/27 Javascript
jQuery实现表单步骤流程导航代码分享
2015/08/28 Javascript
js实现的后台左侧管理菜单代码
2015/09/11 Javascript
JS实现的全排列组合算法示例
2017/10/09 Javascript
node打造微信个人号机器人的方法示例
2018/04/26 Javascript
JS 使用 window对象的print方法实现分页打印功能
2018/05/16 Javascript
详解小程序设置缓存并且不覆盖原有数据
2019/04/15 Javascript
Vue+elementUI实现多图片上传与回显功能(含回显后继续上传或删除)
2020/03/23 Javascript
[02:42]DOTA2英雄基础教程 杰奇洛
2013/12/23 DOTA
python网络编程之TCP通信实例和socketserver框架使用例子
2014/04/25 Python
Django的数据模型访问多对多键值的方法
2015/07/21 Python
对python使用http、https代理的实例讲解
2018/05/07 Python
Python常用爬虫代码总结方便查询
2019/02/25 Python
python3+PyQt5 自定义窗口部件--使用窗口部件样式表的方法
2019/06/26 Python
Python实现变声器功能(萝莉音御姐音)
2019/12/05 Python
python实现串口通信的示例代码
2020/02/10 Python
Pycharm激活码激活两种快速方式(附最新激活码和插件)
2020/03/12 Python
Python学习笔记之装饰器
2020/08/06 Python
python不同版本的_new_不同点总结
2020/12/09 Python
GEOX鞋美国官方网站:意大利会呼吸的鞋
2017/07/12 全球购物
Java里面有没有全局变量?为什么?
2015/02/06 面试题
建筑学推荐信
2013/11/03 职场文书
交通安全演讲稿
2014/01/07 职场文书
护士检查书
2014/01/17 职场文书
初中班主任经验交流材料
2014/05/16 职场文书
本科毕业生自荐信
2014/05/26 职场文书
2016年大学自主招生自荐信范文
2015/03/24 职场文书
个人维稳承诺书
2015/05/04 职场文书
教师节祝酒词
2015/08/11 职场文书
读《茶花女》有感:山茶花的盛开与凋零
2020/01/17 职场文书
手把手教你用SpringBoot将文件打包成zip存放或导出
2021/06/11 Java/Android
Python机器学习应用之工业蒸汽数据分析篇详解
2022/01/18 Python