如何在Spring Security中使用UserDetailsS​​ervice中的会话?

时间:2016-02-29 11:33:16

标签: spring spring-mvc spring-security

我有一个带有登录详细信息的员工表和来自分支表的branch_id。登录后,我从UserDetailsS​​ervice.how获取用户名,密码和权限以获取用户的branch_id。

3 个答案:

答案 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的实现,其中包含您需要的所有字段?

如果您已经在创建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;
    }

答案 2 :(得分:0)

如果您的 UserDetailsS​​ervice 实施 UserDetailsManager ,只需使用 loadUserByUsername 方法加载您需要的数据。

UserDetails loadUserByUsername(String username) throws UsernameNotFoundException;

您可以使用@Autowired访问数据源以获取数据。