Acegi缓存用户信息问题
修改用户信息之后我都要将用户信息放入缓存,但是每次调用
UserDetails userDetail = userCache.getUserFromCache(user.getUserCode());
(userCache是通过spring注入的)为什么detail老是null
并且我不明白这句话
userCache.putUserInCache(userDetail);
到底起到了什么作用?
还有我觉得acegi在验证登陆用户访问受保护资源时,总是通过SecurityContextHolder来获取登陆用户认证信息的,因为得到下面的打印没有任何变化
Authentication auth = SecurityContextHolder.getContext()
.getAuthentication();
if (auth != null && auth.getPrincipal() != null
&& auth.getPrincipal() instanceof UserDetails) {
UserDetails details = (UserDetails) auth.getPrincipal();
log.info( "下面是缓存前的用户信息: ");
log.info( "密码: " + details.getPassword());
log.info( "认证权限: ");
GrantedAuthority[] oldAuthorities = details.getAuthorities();
for (int i = 0; i < oldAuthorities.length; i++) {
log.info(oldAuthorities[i].getAuthority());
}
}
我的理解是acegi验证登陆用户的访问权限是通过SecurityContextHolder来获取的,userCache的userCache.putUserInCache(userDetail);不对SecurityContextHolder起作用,不能与数据库同步。
我在修改用户信息后,比如用户密码,如果我不对用户userCache.putUserInCache(userDetail);进行缓存,那么我退出系统之后,用原来的密码仍然可以登陆,
但是如果
userDetail=new org.acegisecurity.userdetails.User(user.getUserCode(),user.getUserPassword(), false, true, true, true,authorities);
userCache.putUserInCache(userDetail);
我把用户的enable设置成false了,结果退出系统之后,就不能登陆了,我不明白缓存到底咋回事?
请高人赐教!多谢!
------解决方案--------------------我的理解是acegi验证登陆用户的访问权限是通过SecurityContextHolder来获取的,userCache的userCache.putUserInCache(userDetail);不对SecurityContextHolder起作用,不能与数据库同步,对否?