2011-08-25 86 views
0

我是新來的spring和hibernate.I使用POJO類來維護sessoin data.i把範圍作爲一個會話。這裏春季會話範圍使用用戶登錄

@Component 
@Scope("session") 
public class SessionInfo { 
    private int userId; 
    private String loggingUser; 

// getter and setter methods 

} 

然後我的控制器類設定爲範圍=「請求」和方法在控制器I能通過sessionInfo類和設置/獲取會話數據。

@RequestMapping(method = RequestMethod.GET) 
    public String index(Model model,SessionInfo session) { 
     session.setLoggingUser("[email protected]"); 
     // set model attributes .... 
     return "BusinessCategory/index"; 
    } 

這就是我如何維護會話數據在我的應用程序。通過這種方式,每當我需要在需要的每個方法中傳遞sessionInfo類並檢查會話對象中是否存在任何用戶時,Is就是正確與否。也不能使用intercepter。如果不是什麼是在春季維護會話數據的最佳方式。

+0

你是否在使用Spring Security管理登錄到你的應用程序?如果是這樣,他們已經有一個抽象的會話中到達用戶。 –

+0

Thax Ryan,我使用spring安全登錄。如何存儲登錄用戶的會話詳細信息 – Amila

回答

3

Spring安全還包括一個名爲SecurityContextHolder的類。該類是一個線程安全的「單例」,它允許您訪問當前請求的登錄上下文。特別是,您可以通過調用SecurityContextHolder.getContext().getAuthentication().getPrincipal()訪問身份驗證委託人。

如果您使用LdapAuthenticationProvider作爲身份驗證提供程序,則調用getPrincipal()返回的默認實例將爲LdapUserDetailsImpl類型。這可以通過實施自定義UserDetailsContextMapper並將其注入LdapAuthenticationProvider實例的userDetailsContextMapper屬性中來定製。

+0

Thax Ryan,我完成了你的想法並做了一次春季安全用戶登錄。對我來說這完全合適。 – Amila

+0

我在spring安全文件中添加了一個用戶認證查詢。 但現在我需要從用戶表中獲取登錄的用戶ID – Amila

+0

@Amila:請接受答案,如果它是你正在尋找的。這有助於將問題標記爲「已解決」,從而可能有利於社區。 –