我有一个带有登录详细信息的员工表和来自分支表的branch_id。登录后,我从UserDetailsService.how获取用户名,密码和权限以获取用户的branch_id。
答案 0 :(得分:1)
将以下侦听器添加到web.xml:
<listener>
<listener-class>
org.springframework.web.context.request.RequestContextListener
</listener-class>
</listener>
然后将以下代码添加到userdetailsservice实现类中。
@Autowired
private HttpServletRequest request;
之后,您可以在中设置会话属性
public UserDetails loadUserByUsername(String username){}
方法。
request.getSession().setAttribute("branchId", employeeVO.getBranch_id());
答案 1 :(得分:1)
为什么不创建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;
}
答案 2 :(得分:0)
如果您的 UserDetailsService 实施 UserDetailsManager ,只需使用 loadUserByUsername 方法加载您需要的数据。
UserDetails loadUserByUsername(String username) throws UsernameNotFoundException;
您可以使用@Autowired访问数据源以获取数据。