Как правильно настроить 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, для дальнейшей передаче в заголовке