springboot将用户认证信息提取到上下文,获取用户实体
@Service
public class InfoServiceImpl implements InfoService {
@Override
public Map<String, String> getinfo() {
// 将用户认证信息从上下文中(SecurityContext)提取出来
UsernamePasswordAuthenticationToken authenticationToken =
(UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication();
// 获取用户详细信息,获取用户实体
UserDetailsImpl loginUser = (UserDetailsImpl) authenticationToken.getPrincipal();
User user = loginUser.getUser();
Map<String,String> map = new HashMap<>();
map.put("error_message", "success");
map.put("id", user.getId().toString());
map.put("username", user.getUsername());
map.put("photo",user.getPhoto());
return map;
}
}
获取当前认证信息:
UsernamePasswordAuthenticationToken authenticationToken =
(UsernamePasswordAuthenticationToken)
SecurityContextHolder.getContext().getAuthentication();
这行代码从SecurityContextHolder
获取当前的安全上下文(SecurityContext)
,然后获取其中的认证对象(Authentication)
,并尝试将其转换为UsernamePasswordAuthenticationToken
类型。SecurityContextHolder
和UsernamePasswordAuthenticationToken
是Spring Security
提供的类,用于处理安全认证信息。
获取当前登录用户的详细信息:
UserDetailsImpl loginUser = (UserDetailsImpl) authenticationToken.getPrincipal();
通过调用authenticationToken.getPrincipal()
获取认证主体,即用户的详细信息。这里假设主体是UserDetailsImpl
类型,它是UserDetails
接口的一个实现,用于封装用户信息。UserDetails
是Spring Security
的一个核心接口,包含了一些基本的用户信息,如用户名、密码、权限等。
获取用户实体:
User user = loginUser.getUser();
这行代码调用了UserDetailsImpl
中的getUser
方法来获取代表用户的实体对象。假设这里的User
是一个自定义的实体类,包含了用户的各种属性。
获取当前认证信息,获取当前登录用户的详细信息是spring实现的?怎么就知道是登录状态的了?
rds_blogs