카테고리 없음

부산가게찾기API 이슈정리(추가중)

필자A 2021. 12. 8. 15:36

1.security 하드코딩 문제

security filter -  controller 사이의

interceptor, entryPoint, advice에서 예외처리 로직(주로, 인증, 인가)이 많이 더럽게 작성되었다고 생각했습니다.

이 부분에 대하여 정리하고자 합니다.

 

예외 흐름을 컨트롤하는 부분은 아래 클래스에서 진행하도록 합니다.

HandlerInterceptorAdapter

AccessDeniedHandler

OncePerRequestFilter

 


 

CustomFilter(OncePerRequestFilter), CustomHandler(AccessDeniedHandler)를 등록합니다.

그리고 '올바른 권한인가?' 분기마다 어떤 클래스로 이동되는가 확인하기 위해

'ADMIN'권한을 필요로 하는 URL을 하나 지정합니다.

 

CustomFilter는 필터 체인 앞쪽에 배치하였습니다.

(필터 체인 내에서 가지고 있는 요청정보들이 많은 필터들을 거치면서

controller에 도착할 때까지 보관하고 있나 확인합니다. 이정보들로 응답 정보를 만들 생각입니다.))

 

 

CustomInterceptor(HandlerInterceptorAdapter) 등록합니다.

spring security 모듈을 사용하지 않을 때는

interceptor영역에서 사전처리(인증, 인가...)를 한다고 합니다.

 

 

흐름은 "요청 -> 커스텀 필터 -> (핸들러, 인터셉터) -> 컨트롤러 -> 응답"으로 이루어집니다.

 

WebAsyncManagerIntegrationFilter앞에 두었습니다. 필터 체인 중 앞부분이 위치하게 됩니다.

(필터 체인 중간쯤에 두면 현재 상태에 따라 안탈 수도 있으므로 앞에 두었습니다.)

controller까지 가져가 "hello code!"를 다시 응답해줄 생각입니다. 

 

이 필터는 어떤 요청이든 무조건 타게 됩니다.

 

이제 로그인을 하고 '/admin'요청을 보냅니다.(ADMIN이 필요 권한입니다. 권한 불충족 시를 확인합니다.)

request값도 확인되었으며 sendReirect("/noRole")로 이동합니다.

CustomFilter ->AcessDenineHandler -> Controller까지 잘 실행되고

처음에 넣었던 문자열도 응답받을 수 있습니다.

 

security가 4xx, 5xx 어떤 예외를 던져도 interceptor를 타게 됩니다.

security를 사용할 때는 interceptor or security모듈에 있는 기능 잘 구분해서 써야 할 것 같습니다.

 

 


"/"를 요청합니다. 필요 권한이 없으므로 접근할 수 있습니다.

매핑된 컨트롤러입니다. 

처음 설명처럼 필터는 무조건 타게 되고 interceptor -> controller로 갑니다.

필터단에서 저장한 정보도 그대로 사용할 수 있습니다.

 

 

이전 프로젝트 진행하며 공부를 해서 많이 프로젝트 코드가 지저분합니다.

어떤 상황에서 어떤 흐름으로 간다를 알아두고 진행하였으면 깔끔하게 되었을 텐데

생각이 듭니다.

반응형