如何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
Nginx使用X-Accel-Redirect实现静态文件下载的统计、鉴权、防盗链、限速等
Apr 04 Servers
解析在浏览器地址栏输入一个URL后发生了什么
Jun 21 Servers
Nginx+Windows搭建域名访问环境的操作方法
Mar 17 Servers
CentOS下安装Jenkins的完整步骤
Apr 07 Servers
从零开始在Centos7上部署SpringBoot项目
Apr 07 Servers
如何Tomcat中使用ipv6地址
May 06 Servers
使用Nginx+Tomcat实现负载均衡的全过程
May 30 Servers
nginx设置资源请求目录的方式详解
May 30 Servers
Windows Server 2008配置防火墙策略详解
Jun 28 Servers
keepalived + nginx 实现高可用方案
Dec 24 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下检测字符串是否是utf8编码的代码
2008/06/28 PHP
PHP操作Memcache实例介绍
2013/06/14 PHP
php跨服务器访问方法小结
2015/05/12 PHP
php从数据库读取数据,并以json格式返回数据的方法
2018/08/21 PHP
基于JQUERY的两个ListBox子项互相调整的实现代码
2011/05/07 Javascript
js实现在字符串中提取数字
2013/11/05 Javascript
使用jquery操作session方法分享
2015/01/22 Javascript
javascript 判断是否是微信浏览器的方法
2016/10/09 Javascript
js自制图片放大镜功能
2017/01/24 Javascript
Angular实现一个简单的多选复选框的弹出框指令实例
2017/04/25 Javascript
详解使用PM2管理nodejs进程
2017/10/24 NodeJs
JavaScript中的高级函数
2018/01/04 Javascript
微信小程序实现弹出菜单功能
2018/06/12 Javascript
Vue中的$set的使用实例代码
2018/10/08 Javascript
vue-cli 3.0 版本与3.0以下版本在搭建项目时的区别详解
2018/12/11 Javascript
Python实现比较两个列表(list)范围
2015/06/12 Python
python 实现的发送邮件模板【普通邮件、带附件、带图片邮件】
2019/07/06 Python
python使用建议与技巧分享(一)
2020/08/17 Python
解决python便携版无法直接运行py文件的问题
2020/09/01 Python
python使用正则表达式匹配txt特定字符串(有换行)
2020/12/09 Python
CSS3制作气泡对话框的实例教程
2016/05/10 HTML / CSS
荷兰包包购物网站:The Little Green Bag
2018/03/17 全球购物
美国机场停车位预订:About Airport Parking
2018/03/26 全球购物
个人简历自我鉴定
2013/10/11 职场文书
求职简历推荐信范文
2013/12/02 职场文书
四年大学自我鉴定
2014/02/17 职场文书
实习生评语
2014/04/26 职场文书
八一建军节演讲稿
2014/09/10 职场文书
群众路线党员个人剖析材料
2014/10/08 职场文书
优秀教师事迹材料
2014/12/15 职场文书
团员年度个人总结
2015/02/26 职场文书
2015驻村干部工作总结
2015/04/07 职场文书
一个独生女的故事观后感
2015/06/04 职场文书
最新的离婚协议书范本!
2019/07/02 职场文书
Java网络编程之UDP实现原理解析
2021/09/04 Java/Android
Jedis操作Redis实现模拟验证码发送功能
2021/09/25 Redis