在Spring框架中,可以通过SecurityContextHolder来获取当前登录用户的信息,包括用户的id。具体步骤如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
@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<>());
}
}
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
private String password;
// 省略其他属性和方法
}
@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
领取专属 10元无门槛券
手把手带您无忧上云