我有一個員工表,登錄詳細信息和branch_id從分支table.after登錄後,我從UserDetailsService.how獲取用戶名,密碼,授權以獲取用戶的branch_id。如何在Spring Security中使用UserDetailsService中的會話?
回答
如果您的UserDetailsService實現UserDetailsManager,只需使用loadUserByUsername方法加載你需要的數據。
UserDetails loadUserByUsername(String username) throws UsernameNotFoundException;
您可以使用@Autowired工作再上一個數據源訪問來獲取數據。
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());
爲什麼你不創建一個UserDetails的實現,它包括你需要的所有字段?
如果您已經創建了UserDetailsService,那麼返回另一種類型的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
}
然後在你的UserDetailsService創造者的一個實例實現類
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;
}
UserDetailsService接口是Spring安全性提供的默認接口。我創建了一個實現UserDetailsService並覆蓋默認方法的實現類。 –
這就是我的意思。如果你正在創建你自己的UserDetailsService實現,爲什麼不讓它返回一個你需要的所有屬性的UserDetails實現類? – jlumietu
- 1. Spring Security和UserDetailsService
- 2. Spring Security - 實現UserDetailsService
- 3. Spring Security UserDetailsService不叫
- 4. Spring Security UserDetailsService不驗證密碼
- 5. Spring Security,彈簧安全覆蓋UserDetailsService
- 6. Spring Security - UserDetailsService實現 - 登錄失敗
- 7. 如何使用Grails 3在UserDetailsService中獲取會話?
- 8. Spring Security自定義UserDetailsService使用用戶服務/ Dao
- 9. Spring Security - 如何爲UserDetailsService提供附加參數
- 10. 使用時auth.inMemoryAuthentication()或auth.userDetailsService(UserDetailsService的())
- 11. Spring Security中使用UserDetailsService實現和異常的自定義消息
- 12. 將自定義UserDetailsService添加到Spring Security OAuth2應用程序
- 13. 的Spring Security 3.x的:沒有一個UserDetailsService
- 14. Spring Security:UserDetails和UserDetailsService是否存在於使用Spring Security的每種應用程序中?
- 15. 使用JdbcUserDetailsManager vs自己的UserDetailsService
- 16. 如何使用Spring Security控制會話
- 17. SpringSecurity使用UserDetailsService和Hibernate登錄
- 18. spring-saml和UserDetailsService可以共存嗎?
- 19. 修改Pentaho的UserDetailsService
- 20. Grails Spring Security自定義UserDetailsService(電子郵件的目標代替用戶名)
- 21. Spring Security無法在服務層訪問自定義的userDetailsService Bean
- 22. Spring安全中的UserDetailsService中的問題
- 23. SpringSecurity UserDetailsService獲取密碼
- 24. 如何在UserDetailsService中檢索用戶輸入的密碼
- 25. Spring Security 2 userDetailsService問題上的自定義身份驗證提供程序
- 26. UserDetailsService自身實現的Spring Security空依賴bean自己實現
- 27. 如何獲取grails中的url參數spring security custom UserDetailsServices class?
- 28. 的UserDetailsService沒有得到調用
- 29. 自從Spring Security從XML遷移到JavaConfig以來UserDetailsService bean缺失
- 30. 在Spring Security中刪除會話
的loadUserByUsername方法將返回的UserDetails。包含用戶名,密碼和權限。無法獲取branch_id。 –
@Autowired 私人HttpServletRequest請求; 使用上面的代碼我創建一個會話屬性,並將branch_id設置爲該對象。 –
如果您實現UserDetails,則可以存儲自定義數據,然後使用** loadUserByUsername **返回它(請參閱@jlumietu答案)。沒有必要爲會話設置新的屬性。 –