トラブルシューティング。Web系。

Webアプリケーションにて、入力されたセキュア項目(例えばクレジットカード番号とか)は
乱数を元に暗号化してログ出力するようにしている。


ServletのFilterを使って、Refererの情報や、
ポストされたFormの情報をログ出力するような仕掛けにしていて。


HTMLのnameに XX_ って感じで接頭辞をつけてやると、
セキュア項目だと認識されて(ただのif文の分岐ですが、、)暗号化してログ出力するようになっている。


が、カットオーバーして、100名近い人がアクセスするようになってから、
暗号化して出力する部分でArrayIndexOutOfBoundsエラー。


そしたら、、JCEのCipherのインスタンスはスレッドセーフではない、と。
http://www.jnsa.org/seminar/API/Inada.pdf


よくもまぁ、今まで出なかったなぁと。


バッチアプリでも、この部分のフレームワークのライブラリを使っていて。
そこでの性能対策のために入れた対応が原因。
(それまでは毎回インスタンスを生成するようにしていた)
バッチアプリはシングルスレッドなので問題なかった。。


ServletのFilterのログ出力部分を直列化するのが、
一番実装の変更が少なかったので、暫定的に対処。
今日1日動かしたところ、直列化しても、待ちが発生して、
レスポンスに影響は発生していない。


にしても、SimpleDateFormatがスレッドセーフじゃない
なんていうのは有名だけど、
まさかこんなところでお目にかかるとは。。。


勉強になりました。


トラブルのない平和な日々はいつになったらやってくるのやら。。