3

スプリング セキュリティの構成と、使用する InvalidSessionStrategy 実装にわずかな問題があります。

ユーザーがアプリに接続してページを表示している/userArea/thePageとします。セッションがタイムアウトすると、ユーザーは最初にページにリダイレクトされます/signin。次に、サインインに成功すると、個人用領域のホームページにリダイレクトされます( /userArea)のに対し、セッションがタイムアウトしたときに元の場所に戻ってほしいと思います/userArea/thePage

これは可能ですか?

その場合、config/app をどのように変更する必要がありますか?

これが私の現在の設定です:

<beans:bean id="sessionManagementFilter" class="org.springframework.security.web.session.SessionManagementFilter">
        <beans:constructor-arg name="securityContextRepository" ref="httpSessionSecurityContextRepository" />
        <beans:property name="invalidSessionStrategy" ref="simpleRedirectInvalidSessionStrategy" />
    </beans:bean>

<beans:bean id="simpleRedirectInvalidSessionStrategy" class="org.springframework.security.web.session.SimpleRedirectInvalidSessionStrategy">
    <beans:constructor-arg name="invalidSessionUrl" value="/signin" />
    <beans:property name="createNewSession" value="true" />
</beans:bean>


<http auto-config="true" use-expressions="true">
        <custom-filter ref="sessionManagementFilter" before="SESSION_MANAGEMENT_FILTER" />
        <form-login login-processing-url="/resources/j_spring_security_check" login-page="/signin" authentication-failure-url="/signin?login_error=t" default-target-url="/userArea" />
        <logout logout-url="/resources/j_spring_security_logout" logout-success-url="/signin" />
...

編集 1 : 要件をより適切に指定させてください:

  • ユーザー セッションがタイムアウトした場合、ユーザーを保存済みのリクエスト (サインイン ページにリダイレクトされる前にリクエストした URL) にリダイレクトする必要があります。
  • ただし、最初にアプリでサインインしたときに、個人エリアのホームページにリダイレクトされるようにしたい.

私の要件は、Carsten が提案したソリューションを使用して実装できますか (以下を参照)?

4

2 に答える 2

1

always-use-default-target="true"タグに設定できますform-login。これにより、ユーザーは、傍受されてログインする前に、アクセスしようとした URL にリダイレクトされます。

ただし、これは標準的な動作であり、セッション タイムアウトの場合だけではありません。アプリケーションによっては、これが望ましくない場合があります。

編集: あなたが望むことを行うには、セッションがタイムアウトしたときにユーザーがどのページにいたかという情報を保存する方法を見つける必要があります。ユーザーがタイムアウトしたか手動でログアウトしたかを示す状態がないため、この問題のすぐに使える解決策はわかりません。

行う必要があるのは、次のことです。

  1. フラグを設定するか、セッション タイムアウト時にページ URL を保存します
  2. カスタム AuthenticationSuccesHandler をチェックインし、それに応じてリダイレクトします

そのようなものを実装する場合、ページの URL を保存する可能性が高くなります。また、UX の観点から、これにはいくつかのトリッキーなことがあります。保存されたページが以前に達成された状態に依存している場合はどうなりますか? (それが、ユーザーが通常のログイン時にデフォルトの URL に移動するようにしたい理由だと思いますか?) ユーザーがログアウトせず、一晩シャットダウンしてログインし、ログイン ページに移動するとどうなりますか (フラグは/page-url タイムアウト?)? 等

一般的には、 を使用する方がよいと思います。always-use-default-target="true"これにより、任意のページをブックマークし、ログインのたびにそこに移動する必要がなくなるという快適さが追加されます。

于 2013-05-29T10:34:09.413 に答える