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