новая пользовательская страница входа на сервер авторизации
Я использую новый сервер авторизации Spring
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-oauth2-authorization-server</artifactId>
<version>0.2.3</version>
</dependency>
Я хочу настроить пользовательскую страницу входа. У меня настроено два bean-компонента
AuthorizationServerConfig.java
@Bean
@Order(Ordered.HIGHEST_PRECEDENCE)
public SecurityFilterChain authorizationServerSecurityFilterChain(HttpSecurity http) throws Exception {
OAuth2AuthorizationServerConfiguration.applyDefaultSecurity(http);
return http.cors(Customizer.withDefaults())
.formLogin()
.and().build();
}
SecurityConfig.java
@Bean
SecurityFilterChain defaultSecurityFilterChain(HttpSecurity http) throws Exception {
http
.cors(withDefaults())
.authorizeRequests(authorizeRequests ->
authorizeRequests.mvcMatchers("/custom-login", "/css/**", "/js**", "/image/**").permitAll().anyRequest().authenticated()
)
.formLogin()
.loginPage("/custom-login").failureForwardUrl("/custom-login?error");
return http.build();
}
Всякий раз, когда пользователь вводит неправильные учетные данные, не направляется/custom-login?error
Он направлен на/custom-login
мне кажется.failureForwardUrl("/custom-login?error");
не работает
Если не использовать пользовательскую страницу входа, пользователь перенаправляется на/login?error=some-error
Может ли кто-нибудь помочь решить эту проблему?
1 ответ
Я решил проблему.
Я изменил конфигурацию на
AuthorizationServerCONfig.java
@Bean
@Order(Ordered.HIGHEST_PRECEDENCE)
public SecurityFilterChain authorizationServerSecurityFilterChain(HttpSecurity http) throws Exception {
OAuth2AuthorizationServerConfiguration.applyDefaultSecurity(http);
return http
.cors(Customizer.withDefaults())
.formLogin().loginPage("/custom-login").failureForwardUrl("/custom-login?error=true")
.and()
.build();
}
SecurityConfig.java
@Bean
SecurityFilterChain defaultSecurityFilterChain(HttpSecurity http) throws Exception {
http
.cors(withDefaults())
.formLogin().failureForwardUrl("/custom-login")
return http.build();
}
Я добавил LoginController.java для обработки перенаправления пользовательского входа.
@Controller
public class LoginController {
@GetMapping("/custom-login")
public String login() {
return "login";
}
@PostMapping("/custom-login")
public String loginFailed() {
return "redirect:/authenticate?error=invalid username or password";
}
}
Если вы не укажете эти конечные точки. вы будете перенаправлены на /login
Также у меня были оба
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
</dependency>
И
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-oauth2-authorization-server</artifactId>
<version>0.2.3</version>
</dependency>
Мой сервис был и сервером авторизации, и сервером ресурсов одновременно. Поэтому я удалил
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
</dependency>
И все работает ожидаемо