IT수업/SPRINGBOOT

IT 수업 23주차 (179) SPRINGSECURITY _ Handler

워제하 2024. 5. 27. 15:39

- 로그인, 로그아웃 핸들러 만들기

- 로그인

SecurityConfig로 가서 이전에 만들었던 로그인과 로그아웃 코드에 핸들러를 추가해준다.

 

 

 

config의 auth 패키지 안에 loginHandler 패키지를 만들고 그 안에 CustomLoginSuccessHandler와 CustomAuthenticationFailureHandler를 만들어 준다.

 

AuthenticationSuccessHandler는 로그인 성공 후 특정 동작을 제어하기 위해 구현하는 인터페이스이다.

 

커서를 올린 후 implement method를 클릭해 첫번째 것을 클릭해준다.

 

그리고 안의 내용을 작성해준다.

역할에 따라 매핑시키는 페이지를 다르게 설정해준다.

 

 

 

 

이번에는 CustomAuthenticationFailureHandler로 가서 AuthenticationFailureHandler를 implements 해준 뒤 빨간 줄에 커서를 올린 후 implement method를 클릭해준다.

 

그리고 안에 코드를 작성해준다.

 

 

SecurityConfig로 가서 로그인의 handler를 수정해준다.

 

 

 

 

 

 

- 로그아웃

 

이번에는 logoutHandler를 만들기 위해 config 안에 패키지를 만들어 주고 그 안에 CustomLogoutHandler와 CustomLogoutSuccessHandler 클래스를 만들어 준다.

 

역시 implement를 작성하면 빨간 줄이 뜨는데 커서를 올린 후 implement method를 클릭한 후 코드를 작성해준다.

 

getSession( ) 메서드는 요청 객체에 대해 호출되어 해당 요청과 관련된 현재 세션을 가져오는데 

false인 경우 세션이 없다면 새로운 세션을 생성하는 대신에 null을 반환하도록 지정한다.

HttpSession은 클라이언트와 서버 간의 HTTP 요청 사이에서 세션 상태를 관리하는데 사용되며 세션을 사용하면 여러 HTTP 요청 간에 사용자별 데이터를 저장할 수 있게 된다.

 

 

 

CustomLogoutSuccessHandler도 마찬가지로 해준다.

로그아웃이 성공하게 된다면 "/" 페이지로 리다이렉트 해준다.

 

 

 

그리고 SecurityConfig로 가서 로그아웃에 로그아웃의 핸들러를 넣어준다.

 

 

 

 

 

- 예외처리

예외 처리를 위한 핸들러를 만들기 위해 config의 auth 패키지 안에 exceptionHandler를 만들고 그 안에 CustomAccessDeniedHandler와 CustomAuthenticationEntryPoint 클래스를 만들어 준다.

 

먼저 CustomAccessDeniedHandler로 가서 작성해준다.

 

커서를 올려 implement method를 클릭해 만들어준다.

 

 

이번에는 CustomAuthenticationEntryPoint 클래스로 가서 작성해준다.

 

AuthenticationEntryPoint는 인증 처리 과정에서 예외가 발생한 경우 예외를 핸들링하는 인터페이스로 인증 예외가 발생했을시 어떻게 할 것인지를 결정하게 만들어 준다.

AuthenticationException(인증되지 않은 요청)인 경우 AuthenticationEntryPoint를 사용하여 처리하며
AuthenticationEntryPoint의 예외 설정을 관장하는 클래스는 ExceptionHandlingConfigurer클래스이다.

역시 빨간 줄에 커서를 올려 implement method를 클릭해준다.

 

 

 

예외처리의 핸들러를 작성 완료했으면 Security와 연결한다.

SecurityConfig로 가서 예외처리 부분에 핸들러를 추가해준다.

 

 

그리고 실행하게 되면 localhost:8080/ 뒤로 아무거나 쳤을 때 login?error가 발생하면서 login page로 넘어오게 된다.