在Spring Security中检索唯一用户数据

时间:2012-03-15 08:51:10

标签: spring hibernate spring-security

我有一个项目表,用户应该可以选择其中一些项目,然后将这些项目放在另一个表格中(在第二个表格中,它们与选择项目的用户相关联)。我可以通过用户名的帮助关联项目和用户,但我想它不会很好。我想知道,这样做的好方法是什么。我知道有一种简单的方法可以检索用户名(<sec:authentication property="principal.username"/>),但今天我了解到没有这种方法可以获取用户名。解决这个问题的好方法是什么?我应该实施UserDetails以获得获得每个ID的机会吗?这个实现有什么好的例子吗?我使用Hibernate与数据库进行通信。是否有任何其他识别方式(复合键由易于检索的值或类似的值组成)?提前谢谢。

1 个答案:

答案 0 :(得分:2)

是的,您必须实现自己的UserDetail,它将具有id属性。

然后,您将在身份验证期间在UserDetailService的实现中填写此对象。

例如:

@Service("CustomUserDetailService")
public class CustomUserDetailService implements UserDetailsService{

    @Autowired
    private IUserDao userDao;

    @Override
    public UserDetails loadUserByUsername(String name) throws UsernameNotFoundException, DataAccessException {
        User user = userDao.loadByName(name);
        CustomUserDetail customUserDetail = new CustomUserDetail();
        customUserDetail.setId(user.getId());
        customUserDetail.setPassword(user.getPassword());
        return customUserDetail ;
    }

之后,您可以从校长那里检索任何内容:

<sec:authentication property="principal.id"/>