1

ログインしたユーザー用に持っているハッシュマップからログアウトしたユーザーを削除したいのですが、ログアウトリンクを押したときのようにこれを行う方法が見つかりません。ログインページにリダイレクトされました。

春のセキュリティで私は持っています

 <logout invalidate-session="true" 
        logout-success-url="/" 
        logout-url="/logout.htm"/>

ログアウトリンクは次のようなものです

 <a href="logout.htm">Logout</a>

このリンクを押すと、ログインマッピングに移動します

 @RequestMapping("login")
public ModelAndView login(){}

を使用してユーザーの詳細を取得しようとすると

  SecurityContextHolder.getContext()
            .getAuthentication().getPrincipal();

匿名ユーザーを返します。では、ログアウトしたユーザーの詳細を取得するにはどうすればよいですか。

詳細が必要な場合はお知らせください。

4

4 に答える 4

3

org.springframework.security.web.authentication.logout.LogoutSuccessHandlerインターフェースの実装を Bean としてセキュリティ コンテキストに追加します。

次に、それを使用できます。

<logout success-handler-ref="yourLogoutSuccessHandler" />

編集。Marcel が述べたように、 success-handler-ref属性とlogout-success-url属性 (参照) を混在させることはできないため、このソリューションはそのままでは機能しません。私は少し異なる解決策を好みます:継承の代わりに、構成を使用できます:

  1. SimpleUrlLogoutSuccessHandler Bean の構成を準備します。
  2. 対応するdefaultTargetUrlプロパティを介してlogout-success-urlを設定します。
  3. LogoutSuccessHandlerインターフェイスを使用してSimpleUrlLogoutSuccessHandler Bean をCustomUrlLogoutSuccessHandlerに挿入し、作業を行った後に呼び出します。

利点は、フレームワーク コードとの結合が少なくなることです。したがって、Spring Security 3.1 から Spring Security YY に移行する場合の問題は少なくなります。

于 2012-12-18T16:45:29.870 に答える
2

についてのヒントLogoutSuccessHandlerは正しいです。ただし、私が間違っていなければ、その構成を考慮する必要があり、相互に排他的ですsuccess-handler-reflogout-success-urlしたがって、成功ハンドラーで URL への転送を手動で実装する必要があります。ポインタ: https://stackoverflow.com/a/6770785/131929

于 2012-12-18T20:34:18.590 に答える
0
Authentication authentication = SecurityContextHolder.getContext().getAuthentication()
authentication.getName()
于 2012-12-19T11:21:07.553 に答える
0

applicationContext-security.xmlファイルに、以下のような成功ハンドラーを追加します

< logout logout-url="/resources/j_spring_security_logout" success-handler-ref="com.mycompany.security.SpringSecurityLogoutHandler" />

インターフェースを実装するクラスを作成し、そのorg.springframework.security.web.authentication.logout.LogoutHandlerログアウトメソッドで、ログアウト時に必要なすべてのことを実行します。

于 2013-01-04T07:04:50.907 に答える