0

を使用して構築ADF (using JDeveloper 11.1.2.2.0)および展開されたいくつかのプロジェクトをサポートしていますTomcat 7.0.28.

JSessionID:
ログインする前とログインした後で、IT が異なるはずであるという問題がありました。これを解決するために、私のメソッドvalidate()(ユーザーがログインフォームを送信したときに実行される)で次のことを行います:

ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
HttpSession session = (HttpSession)ec.getSession(false);
session.invalidate();
session = (HttpSession)ec.getSession(true);
//setting some special session attributes
ec.redirect("nextPage");

に到達するnextPageと、上記で設定された特別な属性を使用してセッションを取得し、さらに先に進むことができます。Firefox または Chrome からログインすると、すべて正常に動作します。

しかし、IE 8.0 を使用してログインし、にリダイレクトされるnextPageと、コードはこれらの特別な属性なしでセッションを取得し、ログイン ページに戻ります。

Wireshark を使用して、Firefox がログインすると、ユーザー入力 (ユーザー名/パスワード) で POST 要求を送信し、 newJSessionID in SetCookie parameterで応答を受け取り、別の要求を送信しAdf-Window-idて応答を受け取り、その後にリダイレクトされることに気付きましたnextPage

しかし、IE フローの場合は異なります。ログイン時に IE が送信two POST request in a row (first with user input, second with Adf-Window-id)し、その後、それぞれが異なるJSessionID. 最後の 1 つを保存し、にリダイレクトされnextPageます。明らかに、最後の JSessionID は、特別な属性を設定したセッションに属していません。

構成とGoogleを掘り下げてこの問題を解決しようとして、すでに数日を費やしましたが、成功しませんでした。私が見ることができるすべて-IEは時々期待どおりにログインできます(この場合、上記の2つの回答が逆の順序で受信されます)が、めったに起こりません。

多分あなたは同じ問題に直面し、それを解決しましたか?それとも、何か間違ったことをしている/期待しているのですか?

4

2 に答える 2

0

説明した問題は、独自のサーブレットを実装することで解決しました。

ログオンに成功すると、必要なセッション属性が設定され、セッションは無効になりません。次に、ユーザーは自分のサーブレットのコンテキストにリダイレクトされ、すべてのセッション属性が保存され、セッションが無効になり、新しいセッションが作成され、古い属性が復元されます。その後、このサーブレットはユーザーをさらにリダイレクトし、ログオン後にユーザーが到達する必要があります。もちろん、セキュリティのためのいくつかのトリックがあります。

于 2012-09-03T07:23:10.883 に答える
0

実際、あなたがしていることはうまくいきません。Java EE コンテナー管理認証を実行すると、ユーザー セッションが認証されます。セッションを無効にすると、ユーザー認証も失われます。これが機能する唯一の方法は、基本認証を使用する場合です。この場合、ブラウザーは要求ごとに使用資格情報を送信します。

Oracle WLS には、セッション ID を無効にすることなく更新できる独自の方法があります。Tomcat にも同様のものが存在するようです。こちらを参照してください: http://www.koelnerwasser.de/?p=11

于 2012-08-29T05:45:12.000 に答える