반응형
스프링 시큐리티는 애플리케이션의 보안을 강화하고, 다양한 상황에서의 인증 및 권한 부여를 관리합니다. 오늘은 스프링 시큐리티의 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로 리다이렉트하는 기능을 구현할 수 있습니다.
이러한 설정을 통해 사용자 인증 과정을 보다 유연하게 관리하고, 사용자 경험을 개선할 수 있습니다.
스프링 시큐리티의 이러한 기능들은 애플리케이션의 보안을 강화하는 데 핵심적인 역할을 합니다. 코드의 각 부분이 어떻게 작동하는지 이해하고 적절히 활용한다면, 보다 안전하고 사용자 친화적인 웹 애플리
반응형
'Back-end > Spring' 카테고리의 다른 글
[Spring] @SuperBuilder 의 특징과 간단한 예제 (0) | 2024.02.09 |
---|---|
[Spring] DTO 간 복사(BeanUtils, ModelMapper커스텀 하는방법 포함) (0) | 2024.02.09 |
[Spring] Security 6 버전 인메모리 사용자 설정 간단한 예제 (0) | 2024.01.30 |
[Swagger] Spring 3.0 이상 버전에서 스웨거 적용하는 방법 (0) | 2024.01.29 |
[Spring] Access-Control-Allow-Origin header is present 해결방법 (0) | 2024.01.27 |