Я разрабатываю приложение с помощью Spring Boot.Теперь я хочу реализовать контроль учетных записей, и я представляю Spring Session и Spring Security.Это фоновое приложение, основанное на REST-сервисах, интерфейсное приложение будет отдельным приложением, потребляющим эти сервисы.Я хочу контролировать, чтобы каждый пользователь, обращающийся к ресурсам, вошел в систему.
Я не хочу, чтобы Spring Security автоматически обрабатывал вход в систему, я хочу реализовать свою собственную службу входа в мой уже существующий CustomerController, которыйуправление другими службами.
Мой контроллер:
@RestController
@RequestMapping("/customer")
public class CustomerController {
@Autowired
private AuthenticationService authenticationService;
@PostMapping("/login")
public ResponseEntity loginSubmit(@RequestBody LoginForm form) {
Errors errors = authenticationService.validateLoginForm(form);
if (!errors.hasErrors()) {
CustomerDTO result = authenticationService.findCustomerByEmailAndPassword(form);
return new ResponseEntity(result, HttpStatus.OK);
} else {
return new ResponseEntity(errors.getAllErrors(), HttpStatus.OK);
}
}
@GetMapping("/login")
public ResponseEntity testBrowser() {
return new ResponseEntity("Hello world", HttpStatus.OK);
}
[ . . . Other services . . . ]
}
Конфигурация Spring Security:
@EnableWebSecurity
@Configuration
public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/customer/login")
.permitAll()
.and()
.logout()
.permitAll()
.and()
.httpBasic();
}
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/h2-console/**");
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
По сути, это ограничивает доступ всех незарегистрированных пользователей к любому сервису, кроме входа в систему.В моем контроллере реализованы два метода входа в систему.Один GET для тестирования, другой POST.Когда я получаю доступ через браузер (GET), он работает, и я могу достичь точки останова.Однако, когда я пытаюсь POST (через Почтальон), он возвращает 401 Unauthorized, как и остальные службы, которые требуют входа в систему.Точка останова никогда не будет достигнута.
Я верю, что следую примеруЧто мне не хватает, пожалуйста?