2017-03-13 62 views
0

我有兩個Web應用程序(A和B)。 第一個Web應用程序(A)被用作使用spring-cloud的反向代理。 我正在使用spring-session將會話存儲在兩個應用程序的redis數據庫中。春季會話:更新立即在redis中登錄用戶對象

問題
當我修改字段當前(登錄)用戶(如姓名),當前登錄的用戶對象並不會立即更新,因此,當我試圖找回當前登錄的用戶在下次調用時(通過@AuthenticationPrincipal)我得到一個未更新的用戶對象。

我的自定義用戶詳細信息對象:

public class CustomUserDetails extends my.package.User implements org.springframework.security.core.userdetails.UserDetails, java.io.Serializable { 
// ... 
} 

我怎樣才能立即更新當前用戶對象?

回答

0

最近,我有類似的問題,我解決它以下列方式:

1.Created一個自定義的驗證類

public class MyCustomAuthentication implements Authentication { 

    private UserDetails userDetails; 

    public MyCustomAuthentication(UserDetails userDetails) { 
     this.userDetails = userDetails; 
    } 
    ... 
    @Override 
    public Object getDetails() { return userDetails; } 

    @Override 
    public Object getPrincipal() { return userDetails; } 

    @Override 
    public boolean isAuthenticated() { return true; } 
    ... 
} 
  • 更新爲userDetails用一些新鮮的數據對象(我猜,你的情況「名稱」)
  • 從爲userDetails在SecurityContextHolder中

    創建設置新的認證
    SecurityContextHolder.getContext().setAuthentication(new MyCustomAuthentication(userDetails)); 
    
  • 希望你會覺得有幫助。