Spring Security - 인증, 인가 예외 ExceptionTranslationFilter, AuthenticationException, AccessDeniedException
2021. 4. 16. 14:01ㆍSPRING/SPRING SECURITY
ExceptionTranslationFilter
Spring Security는 두 가지 예외를 다룬다.
AuthenticationException - 인증 예외, 인증에 실패할 경우 발생
AccessDeniedException - 인가 예외, 인가에 실패할 경우 발생
사용 예제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
protected void configure(HttpSecurity http) throws Exception {
http.exceptionHandling()
.authenticationEntryPoint(new AuthenticationEntryPoint() {
@Override
public void commence(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, AuthenticationException e) throws IOException, ServletException {
httpServletResponse.sendRedirect("/login");
}
})
.accessDeniedHandler(new AccessDeniedHandler() {
@Override
public void handle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, AccessDeniedException e) throws IOException, ServletException {
httpServletResponse.sendRedirect("/denied");
}
})
;
}
|
cs |
ExceptionTranslationFilter 플로우
AuthenticationException
- 두 가지 일을 한다.
- 1. 사용자가 인증시도 전에 접근하려했던 자원(URL)을 SavedRequest에 저장해둔다. SavedRequest는 RequestCache에 의해 관리된다.
- 2. 인증 실패 후, AuthenticationEntryPoint(핸들러) 호출.
- 보통 인증 실패 후, 로그인 페이지를 보여주고 로그인에 성공하면 원래 접근하려 했던 자원에 다시 접근할 수 있도록 RequestCashe에서 요청 정보를 가져와 리다이렉트하는 작업을 해준다.
- 예제)
1
2
3
4
5
6
7
8
9
10
11
12
13
|
protected void configure(HttpSecurity http) throws Exception {
http.formLogin()
.successHandler(new AuthenticationSuccessHandler() {
@Override
public void onAuthenticationSuccess(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Authentication authentication) throws IOException, ServletException {
RequestCache requestCache = new HttpSessionRequestCache();
SavedRequest savedRequest = requestCache.getRequest(httpServletRequest, httpServletResponse);
String redirectUrl = savedRequest.getRedirectUrl();
httpServletResponse.sendRedirect(redirectUrl);
}
});
}
|
cs |
AccessDeniedException
- 인가 예외는 특별히 추가되는 작업 없이 AccessDeniedHandler를 호출한다.
- 보통 인가처리 페이지로 리다이렉트하는 작업을 한다.
'SPRING > SPRING SECURITY' 카테고리의 다른 글
Spring Security - Security 아키텍처, DelegatingFilterProxy, FilterChainProxy (0) | 2021.04.16 |
---|---|
Spring Security - CsrfFilter (0) | 2021.04.16 |
Spring Security - 인가 API, URL 방식 (0) | 2021.04.16 |
Spring Security - 세션 생성 정책, SessionCreationPolicy (0) | 2021.04.15 |
Spring Security - 세션 고정 보호 API (0) | 2021.04.15 |