我正试图使用Spring Boot Security在我的Spring Boot应用程序上设置一个身份验证系统,但我在让它与我的数据库一起工作时遇到了麻烦。
如果我尝试使用在InMemoryUserDetailsManager中创建的用户凭据登录,AuthenticationManager可以完全正常工作(如果凭据错误,则会抛出错误)。
但是,如果我尝试使用数据库中某个用户的凭据,它不起作用,因为它似乎没有使用AuthenticationManager登录。我是spring boot和spring security的新手,如果我的问题有点愚蠢,请原谅。下面是我的代码,可能有助于您理解我的问题:
@Bean
public InMemoryUserDetailsManager inMemoryUserDetailsManager(){
return new InMemoryUserDetailsManager(
User.withUsername("user1").password(passwordEncoder.encode("1234")).authorities("USER").build(),
User.withUsername("user2").password(passwordEncoder.encode("1234")).authorities("USER").build(),
User.withUsername("admin").password(passwordEncoder.encode("1234")).authorities("USER","ADMIN").build()
);
}
@Bean
public AuthenticationManager authenticationManager(UserDetailsService userDetailsService){
DaoAuthenticationProvider authProvider = new DaoAuthenticationProvider();
authProvider.setPasswordEncoder(passwordEncoder);
authProvider.setUserDetailsService(userDetailsService);
return new ProviderManager(authProvider);
}
@Bean
public SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception {
return httpSecurity
.csrf(csrf ->csrf.disable())
.authorizeHttpRequests(auth->auth.requestMatchers("/auth/**").permitAll())
.authorizeHttpRequests(auth ->
auth.anyRequest().authenticated()
)
.sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
.oauth2ResourceServer(OAuth2ResourceServerConfigurer::jwt)
.httpBasic(Customizer.withDefaults())
.build();
}
@PostMapping("/login")
public Map<String,String> Login(@RequestBody User user){
Authentication authentication = authenticationManager.authenticate(
new UsernamePasswordAuthenticationToken(user.getEmail(), user.getPassword())
);
我的数据库配置正确,并且包含用户
1条答案
按热度按时间hs1rzwqc1#
对于可能和我处于相同情况的人,你必须在代码中添加以下内容:
此外,您必须按如下方式更改您的authenticationManager: