今までTomcatを利用してプロジェクトを開発するのはよくありますが、WildFlyは今回初めて利用しています。
WildFlyを導入して、最初URLかHTMLをアクセスするとき、LegacyCookieSupportのisHtpSeparatorの問題が発生しました。
ネット上にいろいろな方法を調べましたが、役に立つ情報が少なくて、結局エラーログを分析して解決できました。
ネット上のよくある解決方法と自分の解決方法を説明したいと思います。
何か役に立てれば幸いです。
問題点
An invalid control character [20809] was present in the cookie value or attribute
at io.undertow.util.LegacyCookieSupport.isHttpSeparator(LegacyCookieSupport.java:142)
at io.undertow.util.LegacyCookieSupport.isHttpToken(LegacyCookieSupport.java:163)
at io.undertow.util.LegacyCookieSupport.adjustedCookieVersion(LegacyCookieSupport.java:248)
at io.undertow.server.Connectors.getCookieString(Connectors.java:154)
at io.undertow.server.Connectors.flattenCookies(Connectors.java:99)
at io.undertow.server.protocol.http.HttpResponseConduit.processWrite(HttpResponseConduit.java:161)
at io.undertow.server.protocol.http.HttpResponseConduit.write(HttpResponseConduit.java:596)
at io.undertow.conduits.AbstractFixedLengthStreamSinkConduit.write(AbstractFixedLengthStreamSinkConduit.java:106)
at org.xnio.conduits.Conduits.writeFinalBasic(Conduits.java:132)
at io.undertow.conduits.AbstractFixedLengthStreamSinkConduit.writeFinal(AbstractFixedLengthStreamSinkConduit.java:175)
at org.xnio.conduits.ConduitStreamSinkChannel.writeFinal(ConduitStreamSinkChannel.java:104)
at io.undertow.channels.DetachableStreamSinkChannel.writeFinal(DetachableStreamSinkChannel.java:195)
at io.undertow.server.HttpServerExchange$WriteDispatchChannel.writeFinal(HttpServerExchange.java:2042)
at io.undertow.servlet.spec.ServletOutputStreamImpl.writeBufferBlocking(ServletOutputStreamImpl.java:568)
at io.undertow.servlet.spec.ServletOutputStreamImpl.close(ServletOutputStreamImpl.java:603)
at io.undertow.servlet.spec.ServletPrintWriter.close(ServletPrintWriter.java:117)
at io.undertow.servlet.spec.ServletPrintWriterDelegate.close(ServletPrintWriterDelegate.java:81)
at io.undertow.servlet.spec.HttpServletResponseImpl.closeStreamAndWriter(HttpServletResponseImpl.java:473)
at io.undertow.servlet.spec.HttpServletResponseImpl.responseDone(HttpServletResponseImpl.java:568)
at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:339)
at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:81)
at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:138)
at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:135)
at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)
at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
at org.wildfly.extension.undertow.security.SecurityContextThreadSetupAction.lambda$create$0(SecurityContextThreadSetupAction.java:105)
at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1508)
at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1508)
at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1508)
at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1508)
at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1508)
at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:272)
at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81)
at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:104)
at io.undertow.server.Connectors.executeRootHandler(Connectors.java:326)
at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:812)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
問題発生タイミング
・初期導入
・WildFlyアップデート後
ネット上の解決方法の纏め
・WindowOSの再インストール OR WildFlyの再インストール
・ブラウザ側のCOOKIEのクリア
こちらの解決方法
①エラーログを分析
An invalid control character [20809] was present in the cookie value or attribute
エラーログからみると、character 20809 が問題となることが分かった。
②UNICODEに対応する内容を調査
UNICODE 一覧 10進
を検索すると、20809→「光」の漢字になることも分かった。
③「光」に関する設定場所の特定
「光」分かったら、連想してWildFlyサーバIDにはちょうど「光」が入っている。
④解決
漢字を無くして、もう一度WildFlyサーバ起動したら直りました。
※サーバIDのみならず、PC名とか関連しそうな箇所を調べることをお勧めです。
参照
・About Undertow
JBoss Undertowの紹介
・Undertow API
Undertow 2.1.0.Final API
・UNICODE一覧
UNICODE 一覧 10進
PS
この方法で解決できたら、「いいね!」を評価していただければ嬉しいです。