web-dev-qa-db-ja.com

Hibernateで更新した後、Spring Security Principalをリロードする方法は?

これは一般的な問題であるに違いありません...そしてグーグルしてSOingした後、答えを十分に調べなかったか、no1がそれを求めていなかったと思います...だから許してください。

Spring SecurityとHibernateなどを使用しています。

したがって、ユーザー/プリンシパルがログインし、プロファイルにいくつかの変更を加えました。

DAOを使用してプロファイル(UserDetails)を更新し、プリンシパルにこの更新を自動的に反映させます。

ただし、プリンシパルを再度取得すると、ダーティバージョンが(最初のログインから)取得されます。

Spring Securityで更新されたUserDetailsをHibernateからリロードする方法を知っている人はいますか?

35
alwinc

OK探して、ようやく答えを見つけました。

UsernamePasswordAuthenticationTokenを作成し、更新されたプリンシパルをコンテキストに割り当てることができます。

Authentication authentication = new UsernamePasswordAuthenticationToken(userObject, userObject.getPassword(), userObject.getAuthorities());
SecurityContextHolder.getContext().setAuthentication(authentication);

Spring Security/SpringMVCで認証済みユーザーを手動で設定する方法 」も参照してください。

50
alwinc