Tomcat7から9へのアップグレード

投稿者: | 2018年12月6日

GMOアドマーケティングのT.Kです。
Java 11へのアップグレードについては私より詳しい方が記事を投稿する事を信じて
Tomcat 9へのアップグレードで対応した箇所をまとめます。

DBCP設定パラメータの変更
context.xmlのResource設定を修正します。

内容
maxActive maxTotal コネクションの最大数
maxWait maxWaitMillis 接続プールの最大待機時間
removeAbandoned removeAbandonedOnBorrow
removeAbandonedOnMaintenance
コネクションのクローズ漏れ検知

サブドメイン間のCookieの共有
RFC2109では、サブドメイン間でCookieを共有するためには、ドメインの先頭にドットを付ける仕様でした。
RFC6265で先頭にドットを付ける必要がなくなり、ドットを付けるとIllegalArgumentExceptionが発生します。
java.lang.IllegalArgumentException: An invalid domain [.example.com] was specified for this cookie
すぐに対応が出来ない場合は、context.xmlで旧仕様のCookieを使うように設定を追記する事で回避する事が出来ます。
<CookieProcessor className="org.apache.tomcat.util.http.LegacyCookieProcessor" />

クエリパラメータで使用できない文字
CVE-2016-6816の脆弱性対応で、エンコードされていない |{} を含むクエリパラメータを受け付けなくなりました。
requestTargetAllowによる回避は出来ません。リクエスト元でエンコードを徹底する。

まとめ
Tomcat対応は思いの外少なくて済んだのですが
Java 11へのアップグレードと同時に行った関係で、問題の切り分けで苦労しました。
Tomcat→Javaの順にアップグレートした方が楽だったのかもしれません。