如何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 相关文章推荐
Linux安装Nginx步骤详解
Mar 31 Servers
Filebeat 采集 Nginx 日志的方法
Mar 31 Servers
提升Nginx性能的一些建议
Mar 31 Servers
centos8安装nginx1.9.1的详细过程
Aug 02 Servers
使用 Apache 反向代理的设置技巧
Jan 18 Servers
Nginx实现会话保持的两种方式
Mar 18 Servers
教你使用Jenkins集成Harbor自动发布镜像
Apr 03 Servers
配置nginx负载均衡
May 06 Servers
ubuntu下常用apt命令介绍
Jun 05 Servers
利用Apache Common将java对象池化的问题
Jun 16 Servers
Windows Server 2012 R2服务器安装与配置的完整步骤
Jul 15 Servers
在windows server 2012 r2中安装mysql的详细步骤
Jul 23 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
广播爱好者需要了解的天线知识
2021/03/01 无线电
随时给自己贴的图片加文字的php代码
2007/03/08 PHP
PHP使用GIFEncoder类处理gif图片实例
2014/07/01 PHP
PHP上传图片时判断上传文件是否为可用图片的方法
2016/10/20 PHP
PHP生成图片验证码功能示例
2017/01/12 PHP
一个对于Array的简单扩展
2006/10/03 Javascript
GWT中复制到剪贴板 js+flash实现复制 兼容性比较好
2010/03/07 Javascript
JS简单的轮播的图片滚动实例
2013/06/17 Javascript
表单序列化与jq中的serialize使用示例
2014/02/21 Javascript
深入探秘jquery瀑布流的实现
2016/01/30 Javascript
Bootstrap教程JS插件弹出框学习笔记分享
2016/05/17 Javascript
Js删除数组中某一项或几项的几种方法(推荐)
2016/07/27 Javascript
模板视图和AngularJS之间冲突的解决方法
2016/11/22 Javascript
前端js弹出框组件使用方法
2020/08/24 Javascript
jQuery Pagination分页插件_动力节点Java学院整理
2017/07/17 jQuery
基于js 本地存储(详解)
2017/08/16 Javascript
10 种最常见的 Javascript 错误(频率最高)
2018/02/08 Javascript
解决node.js含有%百分号时发送get请求时浏览器地址自动编码的问题
2019/11/20 Javascript
[40:16]TFT vs Mski Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
python简单程序读取串口信息的方法
2015/03/13 Python
详解Python 4.0 预计推出的新功能
2019/07/26 Python
python 如何去除字符串头尾的多余符号
2019/11/19 Python
在python3.64中安装pyinstaller库的方法步骤
2020/06/02 Python
PyCharm2019 安装和配置教程详解附激活码
2020/07/31 Python
Python hashlib模块的使用示例
2020/10/09 Python
python在linux环境下安装skimage的示例代码
2020/10/14 Python
css3 background属性调整增强介绍
2010/12/18 HTML / CSS
css3加js做一个简单的3D行星运转效果实例代码
2017/01/18 HTML / CSS
HTML5各种头部meta标签的功能(推荐)
2017/03/13 HTML / CSS
人力资源专员岗位职责
2014/01/30 职场文书
个人授权委托书范本
2014/04/03 职场文书
党支部综合考察材料
2014/05/19 职场文书
依法行政工作汇报材料
2014/10/28 职场文书
党员转正意见怎么写
2015/06/03 职场文书
党员发展大会主持词
2015/07/03 职场文书
python 自动化偷懒的四个实用操作
2021/04/11 Python