シングル サインオンのシナリオは次のとおりです。
- ポータル (http) で Web アプリのリンクをクリックすると、SSO 統合ページが表示されます。
- sso 統合ページがブラウザーにしばらく表示されます。その後、自動的に (http) 隠しフィールドを使用して Web アプリにデータを投稿します。
- Web アプリがリクエストを受け取り、リクエスト パラメーターからユーザー情報を抽出する
- Web アプリは sso 統合への Web サービス呼び出しを行い、ユーザーがアクティブかどうかを確認します
- 肯定的な応答を受信すると、Web アプリの表示ページ。
この関数をオーバーライドした春のセキュリティで AbstractPreAuthenticatedProcessingFilter を拡張する事前認証フィルターを使用しています。
protected Object getPreAuthenticatedPrincipal(HttpServletRequest request) {
String username = getUserName(request); // Line1
// String username = "userA"; // Line2
return username; // Line 3
}
関数 getUserName は、手順 3 と 4 を実行します。
Line 2 (Line 1 ではなく) を使用すると、すべてが正常に機能し、ユーザーは Web アプリのページを表示できます。行 1 を使用してデバッグすると、例外なく行 2 と同じようにユーザー名が抽出されますが、ユーザーは HTTP エラー コード 404 を取得します。行 3 では、両方のシナリオで同じ値が得られます。
なぜこれが起こっているのか、エラーはどこにあるのか、まったくわかりません。:(誰かが私を正しい方向に向けることができますか?
更新:私が受け取った Http 404 応答は次のようなものです。
Response Headers Value
Set-Cookie JSESSIONID=b8f8615855da6e92d780f12e2bbe; Path=/<webapp>; Secure; HttpOnly
また、ブラウザでページを更新すると、ユーザーはログインしてページを表示できます。更新の場合、jsessionid は url パラメータとして存在しませんが、2 行目を使用している場合、jsessionid は url パラメータとして存在しますか? 私はこの行動を理解することができません。