首页
学习
活动
专区
工具
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

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

相关·内容

领券