✏️ 로그인 실패시 원하는 로직 작동시키기
- 로그인과 관련된 로직은 Srping Security 가 전담하기 때문에 Controller 에서 직접 설정을 해줄 수 없다.
- 즉 Security 계층에서 설정해주어야 하는데 Conroller 에서 다루는 방법과 다르기 때문에 별도로 포스팅 해봤다.
📍 Security 계층
- 먼저 로그인이 실패했을 때 실행되는 로직을 입력하는 로직을 추가했다.
- 람다식이 가독성이 좋아서 사용해봤는데 만족도가 높다.
@Configuration
@EnableWebSecurity
@RequiredArgsConstructor
@EnableMethodSecurity(prePostEnabled = true)
public class SecurityConfig {
private final FailureHandler failureHandler;
@Bean
SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
return http
.formLogin(
formLogin -> formLogin
.loginPage("/member/login")
)
.formLogin(
loginFail -> loginFail
.failureHandler(failureHandler)
)
.oauth2Login(
oauth2Login -> oauth2Login
.loginPage("/member/login")
)
.logout(
logout -> logout
.logoutUrl("/member/logout")
).build();
}
📍 AuthenticationFailureHandler 상속
- 로그인 실패를 처리하는 객체를 만드려면
AuthenticationFailureHandler
를 상속받아야 한다.
onAuthenticationFailure
를 오버라이딩 한다.
- 이곳에서 밖에 사용하지 않을거기 때문에
SecurityConfig
객체에 같이 구현해주었다.
- 이제 method 내부에
request
와 response
를 사용해 원하는 로직을 구현하면된다.
@Component
class FailureHandler implements AuthenticationFailureHandler {
@Override
public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) throws IOException, ServletException {
}
}