在用户多角色的系统中,对用户的角色进行更新,完成更新后应让用户重新登录系统,否则用户将继续拥有被删除角色的权限或者对新增的角色依旧没有权限。Spring Security能通过是指定用户的session过期,从而很好的实现这一功能。
OK直接上代码:
public class UserService {
@Autowired
private SessionRegistry sessionRegistry;
@Autowired
private IUserDao userDao;
public void updateUser(UserDto userDto) {
User user = userDao.findById(userDto.getId());
// 对userDto信息进行处理。即对user进行各种set值
// update user
userDao.update(user);
// 更新完成之后,清除该user的属性,让其重新登录。
removeSession(user);
}
private void removeSession(User user) {
for (Object userDetail : sessionRegistry.getAllPrincipals()) {
String userName = ((org.springframework.security.core.userdetails.User) userDetail).getUsername();
if (userName.equals(user.getAccountNumber())) {
removeSession(userDetail);
}
}
}
private void removeSession(Object principal) {
List<SessionInformation> sessionInformations = sessionRegistry.getAllSessions(principal, false);
for (SessionInformation sessionInformation : sessionInformations) {
sessionInformation.expireNow();
}
}
}