Я разрабатываю приложение с 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:
@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 (через Postman), он возвращает 401 Unauthorized, как и остальные службы, требующие входа в систему. Точка останова никогда не срабатывает.
Я верю, что следую шаблону. Что мне не хватает, пожалуйста?
.formLogin()
? - person aBnormaLz   schedule 19.12.2018