我有一个员工表,登录详细信息和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. 如何使用Grails 3在UserDetailsService中获取会话?
- 7. Spring Security自定义UserDetailsService使用用户服务/ Dao
- 8. Spring Security - 如何为UserDetailsService提供附加参数
- 9. 使用时auth.inMemoryAuthentication()或auth.userDetailsService(UserDetailsService的())
- 10. 的Spring Security 3.x的:没有一个UserDetailsService
- 11. Spring Security:UserDetails和UserDetailsService是否存在于使用Spring Security的每种应用程序中?
- 12. 如何使用Spring Security控制会话
- 13. 使用JdbcUserDetailsManager vs自己的UserDetailsService
- 14. SpringSecurity使用UserDetailsService和Hibernate登录
- 15. Spring安全中的UserDetailsService中的问题
- 16. SpringSecurity UserDetailsService获取密码
- 17. Spring Security 2 userDetailsService问题上的自定义身份验证提供程序
- 18. UserDetailsService自身实现的Spring Security空依赖bean自己实现
- 19. 如何获取grails中的url参数spring security custom UserDetailsServices class?
- 20. 在Spring Security中删除会话
- 21. 的UserDetailsService没有得到调用
- 22. 春季安全:Autowired userDetailsService
- 23. 使用Spring Security检索会话ID
- 24. UserDetailsService配置正确获取用户
- 25. spring-security不会使http会话无效
- 26. 如何在Spring Security中关闭HTTP会话超时?
- 27. 如何在Spring-security 3.2中处理会话超时3.2
- 28. 如何使用spring-security和jQuery处理过期的会话?
- 29. Spring Security Max登录会话
- 30. Spring会话与spring security saml的集成
的loadUserByUsername方法将返回的UserDetails。包含用户名,密码和权限。无法获取branch_id。 –
@Autowired 私人HttpServletRequest请求; 使用上面的代码我创建一个会话属性,并将branch_id设置为该对象。 –
如果您实现UserDetails,则可以存储自定义数据,然后使用** loadUserByUsername **返回它(请参阅@jlumietu答案)。没有必要为会话设置新的属性。 –