3

Spring Securityでremember-meを無効にする方法はありますか?実装したいシナリオはかなり一般的です。ブラウザウィンドウを閉じた後、ユーザーのセッションを期限切れにします。奇妙に思えますが、Tomcat7とSpringSecurity3.1では機能しません。Spring Security構成ファイルでauto-configを使用しますが、remember-me要素はありません。

それを機能させるための最良の解決策は何ですか?前もって感謝します!

更新これが私の問題を明確にするための使用シナリオです:

  1. ユーザーは、たとえば/secure.htmlなどの制限された領域にログインします
  2. 次に、手動でログアウトせずにブラウザを閉じます。
  3. 彼は再びブラウザを開き、/secure.htmlに直接アクセスします。
  4. 現在のSpringの動作:ページが正常に表示されます。予想される動作:ログインページへのリダイレクト。

鑑別診断の新しい症状:ブラウザのクローズ/オープン間でJSESSIONIDが同じであるため、ユーザーはおそらく再認識されます。TomcatまたはSpringを強制して、ブラウザセッションごとに新しいセッションを生成するにはどうすればよいですか?

SpringSecurity構成のフラグメントを更新します。

<http auto-config="true">
    <anonymous key="anonymous-security" />
    <intercept-url pattern="/auth/**" access="IS_AUTHENTICATED_ANONYMOUSLY" />
    <intercept-url pattern="/**" access="ROLE_ADMIN" />
    <form-login login-page="/auth/login.html" 
                default-target-url="/auth/default.html"
                authentication-failure-url="/auth/failed.html" />
    <logout logout-success-url="/auth/logout.html" delete-cookies="JSESSIONID" />
</http>

Update Documentationは、3.0(3.1を使用)以降、auto-config="true"にデフォルトのremember-me構成がないと主張しています。

3.0より前のバージョンでは、このリストにはremember-me機能も含まれていました。これにより、一部の構成で紛らわしいエラーが発生する可能性があり、3.0で削除されました。

私のウェブアプリの何が問題になっていますか?

4

4 に答える 4

0

問題の明確化:

私は同じ問題に遭遇しました:私のブラウザは私のユーザーを覚えているでしょう。

通常:ログインして制限区域にアクセスした後、ブラウザを閉じてから再度開き、同じ制限区域に入ると、資格情報の入力を求められたときにアクセスできるようになります。

遊んだ後、私は1つの重要なことに気づきました:この動作はブラウザ間で一貫していません

  • Eclipseの基盤となるブラウザは、閉じた後も記憶します
  • Chromeは閉じた後も覚えています
  • IE(9)は閉じた後は覚えていません
  • Firefox(16.0.1)は閉じた後に記憶しません
  • Safari(Windowsの場合は5.1.7)は、閉じた後は記憶しません

より多くのブラウザタイプとバージョンをテストできます...

解決:

  1. 回避策は、ユーザーがブラウザーを閉じていることを検出し、これが発生したときにログアウトをトリガーすることです。しかし、それがどれほど実行可能かはわかりません。

より良い解決策があるかもしれません、私がそれを見つけたら、私はこの答えを更新します。

于 2012-10-19T09:39:19.703 に答える
0

を追加しlogouthandlerて、ローカル セッションを終了できます。

<!-- Logout handler terminating local session -->
<bean id="logoutHandler" class="org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler">
    <property name="invalidateHttpSession" value="true" />
</bean>

実際には、デフォルトで true になっているため、おそらくプロパティを設定する必要はありません。

于 2012-04-09T11:58:32.187 に答える
0

/j_spring_security_logout にリダイレクトして、既存のユーザーをログアウトしてみませんか?

于 2012-04-09T09:46:21.450 に答える
0

最新の Spring セキュリティと Tomcat 6 を使用した実装では、次の構成を使用しています。

<http use-expressions="true" access-denied-page="/Error.xhtml">
    <intercept-url access="isAuthenticated()" pattern="/secure.xhtml"/>               
    <form-login />
    <logout invalidate-session="true" logout-success-url="/search.xhtml"/>
</http>
于 2012-04-09T10:06:35.240 に答える