先日、とても奇妙で恥ずかしいことが起こりました。何が起こったのかを説明する言葉がありません。
私のアプリは、すべてTomcat7でJSF2.1、Hibernate 4、SpringSecurityと統合されたSpring3を実行します。私は経営幹部レベルの重要な人物と電話をしていて、同じページで同時にテスト環境にいました。彼は、彼のページが私の個人アカウントの詳細を思いついたのとほぼ同じ瞬間に、私がナビゲートしていたページにナビゲートしに行きました。私は彼を信じていなかったので、私は彼のオフィスに歩いて行きました、そして確かに、彼はどういうわけか彼がパスワードを持っていない私のアカウントとしてログオンしました。
アプリケーションは患者の健康情報を保護するため、経営幹部レベルに何が起こったのかを完全に報告するように命じられましたが、これがどのように可能であったかがわかりません。私はコードベースを精査し、何も思いつきませんでした。正確なシナリオを何度も再現しようとしましたが、再現できませんでした。私は私が満足しているという知識に基づいた推測さえ持っていません。
Tomcatアプリケーションコンテキストの実装に保存されているセッションで安全でないスレッド操作があった可能性があると思いますが、再現できない場合はこれを証明する方法がありません。また、Spring Securityは他のリクエストよりも先にフィルターとして機能し、転送するため、おそらく他のサーブレットフィルターの1つが干渉したと思いました。他の2つは、最近追加したPrimefacesFileUploadフィルターとOmnifacesSEOフィルターでした。
Omnifacesフィルターは、実際にはPrimefaces File Uploadフィルターと干渉し、2つが互いにうまく機能するように構成を調整する必要があったので、それも可能性があると感じています。
同様の問題を引き起こしているSpringSecurityの既知のバグはありますか?ApplicationContextから誤って間違ったセッション状態を提供することに関してTomcatに既知の問題がありますか?他の誰かが同様の問題を経験したか、これについていくつかのユニークな洞察を持っていますか?
編集:これを投稿した直後に私はこれを見つけました、ほんの数日前に投稿しました:
セッションの取り違え-Apachehttpdとmod_jk、tomcat、springsecurity-他のユーザーのデータを提供
これは、Tomcatの前にApache httpd + mod_jkプラグインがあるのとほぼ同じセットアップなので、私は夢中ではありません:)
アップデート:
mod_jkまたはApacheを前面に配置しなくても、開発環境で問題を再現できたため、これを原因として確実に除外できます。