6

先日、私には非常に奇妙で恥ずかしいことが起こりました。何が起こったのかを記述する言葉はありません。Spring Security/JSF/Hibernateの間違ったセッションがTomcatでハイジャックしていますか?

私のアプリケーションは、JSF 2.1、Hibernate 4、Spring SecurityとTomcat 7で統合されています。私はCレベルから重要な人物と電話をかけていましたが、同時に両方のテスト環境で同時に同じページ。彼は自分のページに私の個人的な口座の詳細が現れたときとほとんど同じ時に私がナビゲートしていたページに移動しました。私は彼を信じていないので、私は彼のオフィスに歩いて、確かに、彼は何とか彼はパスワードを持っていない私のアカウントとしてログオンしていた。

アプリケーションでは患者の健康情報が保護されているため、Cレベルのレポートに完全なレポートを提供するように指示されましたが、これがどのように起こったのかわかりません。私はコードベースを精査し、何も思い付きませんでした。正確なシナリオを複数の場面で再現しようとしましたが、それを再現できませんでした。私は私が満足しているという教育的な推測さえ持っていません。

Tomcatのアプリケーションコンテキストの実装に格納されているセッションで安全でないスレッド操作が行われている可能性がありますが、再現性がない場合はこれを証明する方法がありません。また、Spring Securityは他のリクエストより先にFilterとして動作し、他のサーブレットフィルタの1つが干渉した可能性があることを転送しているとも考えました。他の2つはPrimefaces File Uploadフィルタと私が最近追加したOmnifaces SEOフィルタでした。

Omnifacesフィルタは、実際にはPrimefaces File Uploadフィルタを妨げていました。私はその構成を調整しなければならなかったので、それらの2つがお互いにうまくいくので、それも可能性があります。

同様の問題を引き起こした既知のバグはありますか? Tomcatが誤ってApplicationContextから間違ったセッション状態を提供しているという既知の問題はありますか?他の誰かが似たような問題を経験しているのか、それとも何かユニークな洞察を持っていますか?

EDIT:私は、これを見つけただけで、数日前に投稿まもなくこれを掲示した後:

Session mix up - apache httpd with mod_jk, tomcat, spring security - serving data of other user

を、私は目の前にはApache HTTPD + mod_jkのプラグインを持っているとして、それはほとんどまったく同じ設定でありますTomcatのように確かに、私は狂っていないです:)

UPDATE:私はメートルで問題を再現することができました

mod_jkやApacheを使用しないで開発環境を構築することができます。

+1

ここに他の人のアカウントが表示されているので、これはISPによる積極的なキャッシュになります。あなたとアプリケーションの間にプロキシ/キャッシュがありますか? – ChrisF

+0

@ChrisF Apacheがmod_jk Tomcatコネクタに委任するだけです。 ApacheとTomcatの両方を実行する単一のサーバーです。おそらく、Apacheは何かをキャッシュしていますか?私はそれを取り除き、エラーを再現できるかどうかを調べるつもりです。 –

答えて

4

私はそれを考え出した:)

をそれは開発者のエラーの一種だったが、それはまた春のとんでもないデフォルトの動作です。 私は@SessionScopeと宣言したSessionBeanというJSFマネージドBeanを持っていました。 JSFとSpringを統合するとき、JSF依存性注入はSpring依存性注入と競合するので、Springはそれを処理するJSFモジュールを書き換えて、代わりにSpring DIをラップします。ですから、Session ScopedとしてJSF ManagedBeanを宣言するときには、Spring Beanとしても認識されるように、それに@Controllerアノテーションを付ける必要があります。

しかし、SpringはJSF @RequestScoped@SessionScopedアノテーションを理解していません。Springには、単に@Scope(value = "request|session|singleton?|etc...")という独自のアノテーションがあります。

Springは私が設定したJSFスコープを認識しなかったので、新しく作成したBeanをデフォルトでBeanのためにSINGLETONとして扱いました。

誰かがログオンするたびに、認証プリンシパルからフェッチしたログインしたユーザーをキャッシュするために使用したプロパティを上書きしていました。その後、何かをした人は誰もが別のユーザーとしてログオンしていました。

への道のりでニースのおまけあなたのおかしい豆を間違って構成したことを警告します。

ご協力いただきありがとうございます

関連する問題