Oi!
Aqui tem um exemplo de configuração de segurança para uma aplicação Web tradicional:
@Configuration
@EnableWebSecurity
public class SecurityConfigurations {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
return http
.authorizeHttpRequests(req -> {
req.requestMatchers("/admin/**").hasRole("ADMIN");
req.requestMatchers("/login", "/login/**").permitAll();
req.anyRequest().authenticated();
})
.formLogin(form -> {
form.loginPage("/login").defaultSuccessUrl("/");
})
.logout(logout -> {
logout.logoutUrl("/logout");
})
.build();
}
@Bean
public WebSecurityCustomizer webSecurityCustomizer() {
return (web) -> web.ignoring().requestMatchers("/css/**", "/js/**", "/img/**", "/webfonts/**", "/*.png", "/*.ico", "/error");
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
Repare nesse trecho que indica a url da página de login, qual a url a ser chamada após o login ser processado com sucesso e qual url chamada realiza o logout:
.formLogin(form -> {
form.loginPage("/login").defaultSuccessUrl("/");
})
.logout(logout -> {
logout.logoutUrl("/logout");
})
Você precisa ter um controller que mapeia a url de login e de logout:
@Controller
@RequiredArgsConstructor
public class LoginController {
public static final String LOGIN_PAGE = "login/login";
@GetMapping("/login")
public String carregarFormularioLogin(@AuthenticationPrincipal Usuario logado) {
if (logado != null) {
return "redirect:/";
}
return LOGIN_PAGE;
}
@PostMapping("/logout")
public String efetuarLogout(HttpSession session) {
session.invalidate();
return "redirect:/login";
}
}
Repare que a página de login está mepeada na constante e aponta para: login/login, ou seja, a págian de login deve estar em: src/main/resources/templates/login/login.html
Bons estudos!