1. AccessDeninedHandler이란?
Spring Security에서 제공하는 인터페이스로, 사용자가 자신이 권한이 없는 리소스에 접근하려고 할 때 이를 처리하는 역할을 담당한다.
이 인터페이스를 구현하여 사용자 정의 AccessDeniedHandler를 작성하면, 권한이 없는 사용자가 리소스에 접근하려고 할 때 어떻게 처리할지를 정의한다. 예를 들어, 사용자를 특정 오류 페이지로 리디렉션하거나, HTTP 상태 코드를 반환하거나, 사용자에게 메시지를 표시하는 등의 동작을 정의할 수 있다.
예를 들어 내가 현재 진행중인 프로젝트에서 예를 들것이다.
SecurityConfig
@Bean
SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
//인증 설정
http.authorizeRequests()
.antMatchers("/admin/**").hasRole("ADMIN")
.anyRequest().permitAll()
.and()
.formLogin()
.loginPage("/member/login")
.defaultSuccessUrl("/")
.permitAll()
.and()
.logout()
.logoutRequestMatcher(new AntPathRequestMatcher("/member/logout"))
.logoutSuccessUrl("/")
.invalidateHttpSession(true)
.and()
.exceptionHandling().accessDeniedHandler(new CustomAccessDeniedHandler());
return http.build();
}
에서
.antMatchers("/admin/**").hasRole("ADMIN")
코드를 통해 /admin의 하위 링크는 ADMIN이란 권한을 가지고 있는 사람만 접근을 가능하게 하였다.
이때 만약 권한이 없는 사용자가 접근하면 어떻게 되는가?
마지막의
.exceptionHandling().accessDeniedHandler(new CustomAccessDeniedHandler());
코드에서 처리하게된다.
이때 .exceptionHandling()은 Spring Security 설정에서 예외 처리 설정을 제공하며 이 메서드를 이용해 인증 오류 또는 권한이 없는 접근과 같은 보안 관련 예외가 발생 하였을 때 어떤 동작을 수행하는지 정의할 수 있다.
이때 나는 accessDeniedHandler(new CustomAccessDeniedHandler());를 통해 보안 관련 예외 발생시 동작 수행을 직접 설정해 주었다.
CustomAccessDeniedHandler
public class CustomAccessDeniedHandler implements AccessDeniedHandler {
@Override
public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException accessDeniedException) throws IOException, ServletException {
response.sendRedirect("/accessBlock");
}
}
AccessDeniedHandler의 인터페이스를 구현하며 '/accessBlock' 경로로 이동하도록 설정하였다.
이처럼 보안 관련 예외 발생 시 처리를 돕기 위한 인터페이스이다.
'Spring' 카테고리의 다른 글
| [SpringBoot] 싱글톤(Singleton) 이란? (0) | 2023.05.12 |
|---|---|
| [java] Dependency Injection 개념 (0) | 2023.05.11 |
| [SpringBoot] @Slf4j 와 @Log4j2 (0) | 2023.05.08 |
| [SpringBoot] @Transactional에 대해 (0) | 2023.05.07 |
| [SpringBoot] @RequestParam과 @PathVariable 차이점 (0) | 2023.05.05 |