Запрос POST для весенней загрузки API с пружинной безопасностью всегда Forbbiden 403 - PullRequest
0 голосов
/ 25 мая 2020

Пытаюсь сделать 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, поэтому это не ошибка из-за неправильных учетных данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...