首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何获取当前登录Spring的id

在Spring框架中,可以通过SecurityContextHolder来获取当前登录用户的信息,包括用户的id。具体步骤如下:

  1. 导入相关依赖:在项目的pom.xml文件中添加Spring Security的依赖。
代码语言:txt
复制
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>
  1. 创建一个自定义的UserDetailsService实现类:该类用于从数据库或其他数据源中获取用户信息。
代码语言:txt
复制
@Service
public class UserDetailsServiceImpl implements UserDetailsService {

    @Autowired
    private UserRepository userRepository;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        User user = userRepository.findByUsername(username);
        if (user == null) {
            throw new UsernameNotFoundException("User not found");
        }
        return new org.springframework.security.core.userdetails.User(user.getUsername(), user.getPassword(), new ArrayList<>());
    }
}
  1. 创建一个自定义的User实体类:该类用于表示用户信息。
代码语言:txt
复制
@Entity
@Table(name = "users")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String username;

    private String password;

    // 省略其他属性和方法
}
  1. 创建一个Controller类:该类用于处理获取当前登录用户id的请求。
代码语言:txt
复制
@RestController
public class UserController {

    @GetMapping("/currentUserId")
    public Long getCurrentUserId() {
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        if (authentication.getPrincipal() instanceof UserDetails) {
            UserDetails userDetails = (UserDetails) authentication.getPrincipal();
            // 获取当前登录用户的id
            return userRepository.findByUsername(userDetails.getUsername()).getId();
        }
        return null;
    }
}

在上述代码中,通过SecurityContextHolder.getContext().getAuthentication()方法获取当前登录用户的认证信息,然后通过认证信息获取用户的用户名,再根据用户名从数据库中查询用户信息,最后返回用户的id。

这样,当客户端发送GET请求到"/currentUserId"路径时,将会返回当前登录用户的id。

推荐的腾讯云相关产品:腾讯云云服务器(CVM)和腾讯云数据库(TencentDB)。

腾讯云云服务器(CVM):提供可扩展的云服务器实例,支持多种操作系统和应用场景,适用于各种规模的业务需求。产品介绍链接地址:https://cloud.tencent.com/product/cvm

腾讯云数据库(TencentDB):提供高性能、可扩展的数据库服务,包括关系型数据库(MySQL、SQL Server等)和非关系型数据库(MongoDB、Redis等),满足不同业务场景的需求。产品介绍链接地址:https://cloud.tencent.com/product/cdb

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

实战!用 Spring Gateway 配合 Sa-Token 实现微服务无感鉴权

博主在本文中介绍了如何使用Spring Gateway和Sa-Token实现无感鉴权的方案。他首先提到了Spring Cloud Gateway和Sa-Token的基本概念和功能。然后,博主指出了直接在网关中实现鉴权的局限性,并提出了一种无感鉴权的解决方案。在这个方案中,博主通过在请求中注入用户ID的方式实现了无感鉴权,从而避免了下游微服务依赖Sa-Token的问题。接着,博主详细介绍了如何引入依赖、创建路由、实现鉴权接口和注册全局过滤器的步骤。最后,博主展示了如何为Webflux请求添加过滤器,获取用户登录ID并在请求头中注入,并呈现了下游微服务如何获取到用户ID的方法。博主还表达了对Sa-Token近期文档更新中强制要求用户star并授权的不满,认为这种行为是欺诈和对国内开源环境的打击,并希望Sa-Token能重新考虑该功能的设立。

03
  • 领券