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类型。SecurityContextHolderUsernamePasswordAuthenticationTokenSpring Security提供的类,用于处理安全认证信息。
获取当前登录用户的详细信息:

UserDetailsImpl loginUser = (UserDetailsImpl) authenticationToken.getPrincipal();
通过调用authenticationToken.getPrincipal()获取认证主体,即用户的详细信息。这里假设主体是UserDetailsImpl类型,它是UserDetails接口的一个实现,用于封装用户信息。UserDetailsSpring Security的一个核心接口,包含了一些基本的用户信息,如用户名、密码、权限等。
获取用户实体:

User user = loginUser.getUser();
这行代码调用了UserDetailsImpl中的getUser方法来获取代表用户的实体对象。假设这里的User是一个自定义的实体类,包含了用户的各种属性。


获取当前认证信息,获取当前登录用户的详细信息是spring实现的?怎么就知道是登录状态的了?

image

image

posted @ 2024-02-28 23:51  r涤生  阅读(129)  评论(0编辑  收藏  举报