Back-end/Spring

[Spring] 시큐리티 예외 처리와 사용자 인증 (시큐리티6 이상)

shoney9254 2024. 1. 30. 17:56
반응형

 

 

스프링 시큐리티는 애플리케이션의 보안을 강화하고, 다양한 상황에서의 인증 및 권한 부여를 관리합니다. 오늘은 스프링 시큐리티의 exceptionHandling() 메서드를 활용한 예외 처리 방법과 사용자 인증 과정에 대해 알아보겠습니다.

예외 처리 설정 (exceptionHandling())

스프링 시큐리티에서 예외 처리는 보안 관련 예외가 발생했을 때 적절한 대응을 할 수 있도록 돕습니다. 대표적으로 두 가지 핸들러를 설정할 수 있습니다.

1. AuthenticationEntryPoint (인증 진입점)

.exceptionHandling(xh -> xh
    .authenticationEntryPoint(new AuthenticationEntryPoint() {
        @Override
        public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException, ServletException {
            response.sendRedirect("/login");
        }
    })
)

  • 인증되지 않은 사용자가 보호된 리소스에 접근하려 할 때 실행됩니다.
  • 예를 들어, 로그인하지 않은 사용자가 로그인이 필요한 페이지에 접근하려고 시도할 때, 로그인 페이지로 리다이렉트합니다.

 

2. AccessDeniedHandler (접근 거부 핸들러)

.exceptionHandling(xh -> xh
    .accessDeniedHandler(new AccessDeniedHandler() {
        @Override
        public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException accessDeniedException) throws IOException, ServletException {
            response.sendRedirect("/denied");
        }
    })
)

  • 사용자가 필요한 권한 없이 보호된 리소스에 접근하려 할 때 실행됩니다.
  • 예를 들어, 일반 사용자가 관리자 페이지에 접근하려고 시도할 때, 접근 거부 페이지로 리다이렉트합니다.

이러한 예외 처리 설정을 통해, 애플리케이션의 보안을 강화하고 사용자에게 적절한 피드백을 제공할 수 있습니다.

 

3. 로그인 성공 핸들러 (AuthenticationSuccessHandler)

.formLogin(f -> f
    .successHandler(new AuthenticationSuccessHandler() {
        @Override
        public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
            RequestCache requestCache = new HttpSessionRequestCache();
            SavedRequest savedRequest = requestCache.getRequest(request, response);
            String redirectUrl = savedRequest.getRedirectUrl();
            response.sendRedirect(redirectUrl);
        }
    })
)

  • 사용자가 성공적으로 로그인한 후 실행되는 로직을 정의합니다.
  • 사용자가 원래 요청했던 URL로 리다이렉트하는 기능을 구현할 수 있습니다.

이러한 설정을 통해 사용자 인증 과정을 보다 유연하게 관리하고, 사용자 경험을 개선할 수 있습니다.


스프링 시큐리티의 이러한 기능들은 애플리케이션의 보안을 강화하는 데 핵심적인 역할을 합니다. 코드의 각 부분이 어떻게 작동하는지 이해하고 적절히 활용한다면, 보다 안전하고 사용자 친화적인 웹 애플리

반응형