问题描述:
再AOP记录登陆日志的时候,要通过 SpringSecurity 获取登陆用户信息!
再使用Authentication authentication = SecurityContextHolder.getContext().getAuthentication();获取UsernamePasswordAuthenticationToken的时候,但是获取到的一直是AnonymousAuthenticationToken
导致username = authentication.getName(); 拿到的userName一直是anonymousUser!
原因是:
因为登陆接口是白名单。(我选择的是手动认证)在进行认证的时候,没有主动执行这句代码SecurityContextHolder.getContext().setAuthentication(authenticate);
导致后面获取到的Authentication 都是AnonymousAuthenticationToken
解决办法:
手动添加: SecurityContextHolder.getContext().setAuthentication(authenticate);
public LoginVo usernameAndPasswordLogin(UsernameAndPasswordLoginRo ro) {
UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(ro.getUsername(), DigestUtil.md5Hex(ro.getPassword()));
Authentication authenticate = authenticationManager.authenticate(authenticationToken);
// 手动认证这句代码不可缺。否则后面拿不到认证完的Authentication
SecurityContextHolder.getContext().setAuthentication(authenticate);