去年国庆70周年,国家安全等级升高,我们这些号称做软件的面临了一次小考。各个行业,针对软件系统安全、网络安全来了一波又一波的扫描。也考验着我们系统设计之初对于安全这个问题的重视程度。这之后,是我们的用户安全意识的整体提高。这不,客户主动要求我们升级Tomcat了。
我们一般做系统,基本上能保证3~7年能用,好用。但是随着时代的发展,技术的进步,客户也在进步,对于历史遗留系统升级,有些是设计考虑不到的。当然我们得评估升级的风险,以给客户合理的建议,如果风险太大,起码得告知客户。
此次我们是可以升级的,但是把程序部署到tomcat8之后,应用起不来了,杯具了。主要遇到如下几个坑,请小心!!
jndi数据源配置有变化
我们的应用配置的数据源在,app/WEB-INFO/context.xml,但是tomcat8以后配置不一样了。
参考:http://tomcat.apache.org/tomcat-8.0-doc/jndi-resources-howto.html
Resource属性和BasicDataSourceFactory变了。主要是factory,属性如果不对,tomcat8会忽略掉。但是factory就不一样了。
tomcat7:
<Resource name="dsxxx" auth="Container" type="javax.sql.DataSource"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@xxxxxxx:testdb"
username="root" password="11111" maxActive="300" maxIdle="150"
maxWait="-1" factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory" />
tomcat8或9:
<Resource name="dsxxx" auth="Container" type="javax.sql.DataSource"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@xxxxxxx:1521:testdb"
username="root" password="22222" maxTotal="300" maxIdle="150"
maxWaitMillis="-1" factory="org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory" />
jsp标签异常
tag文件:
<description>xxx-tag.1.0</description>
<display-name>xxx-tag</display-name>
<tlib-version>1.0</tlib-version>
<short-name>w</short-name>
<uri>/component/tags/xxx-tag.tld</uri>
old:
<uri>http://xxx.org/tags</uri>
new:
<uri>/component/tags/xxx-tag.tld</uri>
页面异常
“Type Exception Report Message Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986”
解决方案:在conf/catalina.properties中最后添加2行:
tomcat.util.http.parser.HttpParser.requestTargetAllow=|{}
org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true