Как правильно настроить security config при использовании Spring Boot версии 3.2.1

Пытаюсь разобраться с SpringSecurity.

Написал простой конфиг, в котором есть такой бин:

@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception{
    http.csrf(CsrfConfigurer::disable)
            .authorizeHttpRequests(auth -> auth
                    .requestMatchers("/home").authenticated()
                    .anyRequest().permitAll())
            .authenticationProvider(authenticationProvider())
            .formLogin(login -> login
                    .loginPage("/login")
                    .permitAll()
            );
    return http.build();
}

Написал контроллер, который должен обеспечивать аутентификацию:

   @Controller
@RequiredArgsConstructor
public class AuthController {

    @Autowired
    private final SecurityService securityService;

    @GetMapping("/login")
    public String getLoginPage(){
        return "login.html";
    }

    @PostMapping("/login")
    @ResponseBody
    public ResponseEntity<AuthResponse> auth(@RequestParam String username, @RequestParam String password){
        LoginRequest loginRequest = new LoginRequest(username, password);
        AuthResponse authResponse = securityService.authenticateUser(loginRequest);
        return ResponseEntity.ok(authResponse);
    }

}

Написал контроллер, который должен возвращать страницу, к которой имеют доступ только аутентифицированные пользователи:

@Controller
public class MainPageController {

    @GetMapping("/home")
    public String getMainPage(){
        return "index.html";
    }
}

Для теста написал html страницу, с которой должен вызываться метод POST/login:

    <!DOCTYPE html>
<html lang="ru">
<head>
  <title>Авторизация</title>
  <meta charset="utf-8">
</head>
<body>
<h2>Авторизация</h2>
<form action="/login" method="post">
  <label for="username">Логин:</label>
  <input type="text" id="username" name="username" required><br><br>

  <label for="password">Пароль:</label>
  <input type="text" id="password" name="password" required><br><br>

  <button type="submit">Войти</button>
</form>
</body>
</html>

По моей задумке, в результате выполнения данного метода, в случае успешной аутентификации должен возвращаться объект следующего класса:

@NoArgsConstructor
@AllArgsConstructor
@Builder
public class AuthResponse {

    private String email;
    private String token;
    private String firstName;
    private String lastName;
    private String patronymic;
    private List<String> roles;
}

Но вместо этого сейчас, при успешной аутентификации я вижу во вкладке Network браузера, что метод POST/login возвращает статус 302 Found и Type document / Redirect, после чего меня перебрасывает на страницу /home

Когда вызываю данный метод через Postman, тоже получаю в ответ html страницу /home В чем может быть причина, как правильно настроить конфиг, чтобы в ответ получать json с данными пользователя, в том числе jwt, для дальнейшей передаче в заголовке


Ответы (0 шт):