Пытаюсь сделать api весенней загрузки. Я делаю вызов POST от Postman на http://localhost:8080/api/v1/database/authenticate
с
{
"email": "asd@asd.com",
"password": "asd"
}
в качестве тела. (В базе данных есть пользователь с этими учетными данными)
У меня также есть конечная точка для запроса PUT на http://localhost:8080/api/v1/database/register
, и она отлично работает.
Мой контроллер:
@RestController
@RequestMapping(value = "/api/v1/database")
public class DatabaseController {
...
@PostMapping(value = "/authenticate")
public ResponseEntity<?> loginUser(@RequestBody LoginUser loginUser) throws Exception {
try {
authenticationManager.authenticate(
new UsernamePasswordAuthenticationToken(loginUser.getEmail(), loginUser.getPassword()));
} catch (BadCredentialsException e) {
throw new Exception("Incorrect username or password");
}
final UserDetails userDetails = myUserDetailsService.loadUserByUsername(loginUser.getEmail());
final String jwt = jwtUtil.gerenateToken(userDetails);
return ResponseEntity.ok(new AuthenticationResponse(jwt));
}
...
My SecurityConfigurer
@EnableWebSecurity
public class SecurityConfigurer extends WebSecurityConfigurerAdapter {
private MyUserDetailsService myUserDetailsService;
@Autowired
public SecurityConfigurer(MyUserDetailsService myUserDetailsService) {
this.myUserDetailsService = myUserDetailsService;
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception{
auth.userDetailsService(myUserDetailsService).passwordEncoder(passwordEncoder());
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf()
.disable()
.authorizeRequests()
.antMatchers("/api/v1/database/authenticate", "/api/v1/database/register")
.permitAll()
.anyRequest()
.authenticated();
}
@Override
@Bean
public AuthenticationManager authenticationManagerBean() throws Exception {
return super.authenticationManagerBean();
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
...
У меня также есть MyUserDetailsService
, но в этой службе я реализую только loadUserByUsername
, который принимает учетные данные из базы данных. Кроме того, для регистрации я кодирую пароль с помощью BCryptPasswordEncoder
, поэтому это не ошибка из-за неправильных учетных данных.