セッションの肥大化を最小限に抑えるために、主にViewScoped Beanを使用しているwebprojektに取り組んでいます。しかし、その後、Bean 間で (データベースなどにアクセスするために) クライアントのユーザー名とパスワードを転送する必要があるという問題に直面します。
次のように、フラッシュ オブジェクトを使用して Bean 間でユーザー名とパスワードを転送するシステムを作成しました。
public String gotoNextView() {
ExternalContext external = FacesContext.getCurrentInstance().getExternalContext();
external.getFlash().put("user_name", (String) FacesContext.getCurrentInstance().getExternalContext().getFlash().get("user_name"));
external.getFlash().put("password", (String) FacesContext.getCurrentInstance().getExternalContext().getFlash().get("password"));
return "/../../next_view.xhtml";
}
しかし、ハッカーが何らかの方法でクライアントを操作し、それによってサーバーをだましてフラッシュ オブジェクトを公開することができるのではないかと心配しています。
私が考えている別の解決策は、Web アプリケーションのすべての JSESSIONID を、ユーザー名とパスワードを値としてマップにキーとして格納することです。これを機能させるには、ユーザー セッションが終了または期限切れになったときにコールバック メソッドを呼び出して、関連する JSESSIONID をマップから削除できるようにする必要があると思います。しかし、その解決策の問題は、コールバックを実装する最善の方法が何であるかについて疑問があることです。これにより、サーバーによって新しい同様の JSESSIONID が作成される前に Map エントリが削除されることを 100% 確信できます (たとえ私がこのような短い時間で発生する可能性は非常に低いことを知っておいてください)。
この問題について深い洞察を持っている人が、ベスト プラクティスとこれに対する 100% 安全な方法について書いてくれることを願っています (また、JSF Web アプリケーション サーバーで作業しているほとんどの人がこの問題に遭遇していると思います。問題の最善の解決策を知っている)。ありがとう。