0

私は春のセキュリティを使用しているアプリケーションに取り組んできました。私は春のセキュリティにまったく慣れていないため、thisおよびthisに似た問題が発生しました。しかし、それは少し違います。

私はこの方法で手動認証を行います:

UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(username, password);
Authentication authentication = this.authenticationProvider.authenticate(token);
SecurityContextHolder.getContext().setAuthentication(authentication);

ページが読み込まれると、すべて問題ないようです。しかし、アプリケーションをナビゲートすると、SecurityContext が失われているようです。(ユーザーがログインしている場合、ステータスバーにユーザー名が表示されます)

私はこのようにコンテキストを取得します:

SecurityContextHolder.getContext()

さらに、コンテキストが完全に失われるわけではなく、正しくロードされないことがあります。1 つのセッションに複数のコンテキストがあるようです (HttpSessionListener があり、sessionCreated が 1 回だけ起動します)。コンテキストのオブジェクト ハッシュを出力してみましたが、いくつかの異なるハッシュが繰り返されていることに気付きました。接続しているユーザーと一緒にいるのは 1 つだけです。他のユーザーはそうではありません。

したがって、1 つのセッションに複数のコンテキストがあると仮定します (これが可能であれば)。すべてを明確に説明したことを願っています。誰かが私に何か助けてくれたら幸いです。

4

2 に答える 2

1

あなたがしていることのために、コンテキストは現在のスレッドにバインドされる必要があります。なぜなら、あなたが電話するとき

SecurityContextHolder.getContext()

ストアからのコンテキストThreadLocalが返されます。各リクエストでコンテキストが現在のスレッドにバインドされていることを確認してください(それをどのように行っているかを説明していないため、詳細はわかりません)。

于 2013-01-20T22:06:31.017 に答える
0

ついにやった!Marcel Störの回答は、正しいキーワードなどを探すのに役立ちました。ありがとうございました。

問題は、セキュリティ フィルター チェーンを認識しない Bean で SecurityContext を設定していたことです。@PostConstruct で呼び出されましたが、正しくありませんでした。

私が本当に必要としていたのは、 PRE_AUTH_FILTERと適切な Spring セキュリティ構成でした。したがって、PRE_AUTH_FILTER は SpringSecurity フィルター チェーンにあり、認証オブジェクトを正しく配置します。

于 2013-01-22T15:23:00.153 に答える