2016-02-29 93 views

回答

0

如果您的UserDetailsS​​ervice實現UserDetailsManager,只需使用loadUserByUsername方法加載你需要的數據。

UserDetails loadUserByUsername(String username) throws UsernameNotFoundException; 

您可以使用@Autowired工作再上一個數據源訪問來獲取數據。

+0

的loadUserByUsername方法將返回的UserDetails。包含用戶名,密碼和權限。無法獲取branch_id。 –

+0

@Autowired 私人HttpServletRequest請求; 使用上面的代碼我創建一個會話屬性,並將branch_id設置爲該對象。 –

+0

如果您實現UserDetails,則可以存儲自定義數據,然後使用** loadUserByUsername **返回它(請參閱@jlumietu答案)。沒有必要爲會話設置新的屬性。 –

1
Add the following listner to web.xml 

<listener> 
    <listener-class> 
org.springframework.web.context.request.RequestContextListener 
</listener-class> 
</listener> 

then add the following code to your userdetailsservice implimentation class. 

@Autowired 
private HttpServletRequest request; 

then you can set session attribute inside the 
public UserDetails loadUserByUsername(String username){} method. 

request.getSession().setAttribute("branchId", employeeVO.getBranch_id()); 
0

爲什麼你不創建一個UserDetails的實現,它包括你需要的所有字段?

如果您已經創建了UserDetailsS​​ervice,那麼返回另一種類型的UserDetails非常簡單。然後它可以保存在您正在使用的Authentication類中,也可以將其保存到details屬性中。

編輯:

public class MyUserDetails implements UserDetails{ 

     private Object branchId; 

     /** 
     * @return the branchId 
     */ 
     public Object getBranchId() { 
      return branchId; 
     } 

     /** 
     * @param branchId the branchId to set 
     */ 
     public void setBranchId(Object branchId) { 
      this.branchId = branchId; 
     } 

     //@Override other methods 

} 

然後在你的UserDetailsS​​ervice創造者的一個實例實現類

public class MyUserDetailsService implements UserDetailsService { 

    /* (non-Javadoc) 
    * @see org.springframework.security.core.userdetails.UserDetailsService#loadUserByUsername(java.lang.String) 
    */ 
    @Override 
    public UserDetails loadUserByUsername(String arg0) 
      throws UsernameNotFoundException { 
     MyUserDetailsuserDetails = new MyUserDetails(); 
     ... 
     userDetails.setBranchId(theBranchId); 

     return userDetails; 
    } 
+0

UserDetailsS​​ervice接口是Spring安全性提供的默認接口。我創建了一個實現UserDetailsS​​ervice並覆蓋默認方法的實現類。 –

+0

這就是我的意思。如果你正在創建你自己的UserDetailsS​​ervice實現,爲什麼不讓它返回一個你需要的所有屬性的UserDetails實現類? – jlumietu

相關問題