0

PreReq:
ユーザーがログインし、userService のカスタム実装を使用してデータベースから取得したロールが付与されます。すなわち

authentication-provider user-service-ref="securityPolicyService"

実装されたメソッドloadUserByUsernameが呼び出され、ユーザーがログインしている特定のクラブのロールがロードされます。デフォルトのロールは初めてロードされます。

次に、ユーザーが UI から別のクラブをクリックすると、このクラブの権限の新しいリストを取得するサービスのメソッドが呼び出されます。

次に、次のことを実行します。

Object principle = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
SecureMember sm = (SecureMember) principle;
Authentication auth = 
      new UsernamePasswordAuthenticationToken(sm, null, newAuthories); <br><br>
    SecurityContextHolder.getContext().setAuthentication(auth);<br>
request.getSession(false).invalidate();

SecureMember は、SpringFramework から User を拡張します。

問題は、SecureMember 権限が新しい権限で更新されないことです。

ありがとうゲイリー

4

1 に答える 1

0

が null でリクエスト中に無効化された場合、Spring Security はセキュリティ コンテキストを保存HttpSessionしないため、セッションを無効化した後にコンテキストを設定した場合 (そして新しいセッションを作成しない場合)、保存されません。

この場合 (デバッグ ログが有効になっている場合)、このログ メッセージが表示されます。

新しいセッションを作成するか、元のセッションを無効にしないでください。

于 2012-04-13T23:26:10.570 に答える