Spring Security如何拿到登录用户的信息

书接上文,我们刚实现了一个简单的登录功能,那么我们要如何才能拿到登录用户的具体信息呢?我进行了一下整理

“登录用户的信息” 是保存在 SecurityContext 里的,可以通过多种方式获取这个用户的信息,下面是最常用的方式:

在 Controller 里用 @AuthenticationPrincipal

@GetMapping("/me")
public String getCurrentUser(@AuthenticationPrincipal UserDetails userDetails) {
   
   
    return "当前登录用户:" + userDetails.getUsername();
}

这个方式适用于:你使用了 Spring Security 默认的 UserDetailsService 或者自定义了用户实体实现了 UserDetails 接口。

SecurityContextHolder.getContext().getAuthentication()

Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
Object principal = authentication.getPrincipal();

if (principal instanceof UserDetails userDetails) {
   
   
    System.out.println("用户名:" + userDetails.getUsername());
}

这个是 最底层、最万能的方式,可以在任何地方(包括 Service 层)使用。

用 Spring 注入 Principal 对象(Controller 中)

@GetMapping("/me")
public String getCurrentUser(Principal principal) {
   
   
    return "当前登录用户:" + principal.getName();
}

同样的,这个方式也适用于:你使用了 Spring Security 默认的 UserDetailsService 或者自定义了用户实体实现了 UserDetails 接口。

用 HttpServletRequest.getUserPrincipal()

@GetMapping("/me")
public String getUser(HttpServletRequest request) {
   
   
    Principal principal = request.getUserPrincipal();
    return principal.getName();
}

这个也常见于过滤器或 Servlet 场景。

自定义实现UserDetails接口

假设我们已经有了一个实体类TUser,如下:

package org.pp.springsecurity.entity;

import com.baomidou.mybatisplus.annotation
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值