在存储库中从Spring Security获取最新的userId的方法是通过使用Spring Security提供的SecurityContextHolder类来获取当前用户的身份信息。SecurityContextHolder是一个用于存储当前用户身份信息的上下文对象。
要获取最新的userId,可以按照以下步骤进行操作:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
以下是一个示例代码:
// 自定义UserDetails实现类
public class CustomUserDetails implements UserDetails {
private Long userId;
// 其他属性和方法省略
}
// 自定义UserDetailsService实现类
@Service
public class CustomUserDetailsService 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 CustomUserDetails(user.getId(), user.getUsername(), user.getPassword());
}
}
// Spring Security配置类
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private CustomUserDetailsService userDetailsService;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService);
}
@Override
protected void configure(HttpSecurity http) throws Exception {
// 配置认证和授权规则
http.authorizeRequests()
.antMatchers("/admin/**").hasRole("ADMIN")
.antMatchers("/user/**").hasAnyRole("ADMIN", "USER")
.and()
.formLogin()
.and()
.logout().logoutSuccessUrl("/login");
}
}
// 获取最新userId的方法
public Long getCurrentUserId() {
CustomUserDetails userDetails = (CustomUserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
return userDetails.getUserId();
}
在上述示例中,我们通过自定义UserDetails和UserDetailsService实现类来获取用户信息,并在SecurityConfig中配置了认证和授权规则。在需要获取最新userId的地方,我们可以通过SecurityContextHolder获取当前用户的身份信息,并从中提取出userId。
请注意,上述示例中的代码仅为演示目的,实际应用中可能需要根据具体情况进行适当的修改和调整。
推荐的腾讯云相关产品:腾讯云云服务器(ECS)、腾讯云对象存储(COS)、腾讯云数据库(TencentDB)等。你可以通过访问腾讯云官方网站获取更详细的产品介绍和文档:https://cloud.tencent.com/
领取专属 10元无门槛券
手把手带您无忧上云