스프링 시큐리티5 Spring Security [2] - 예외 처리 AuthenticationEntryPoint & AccessDeniedHandler 서큐리티를 도입하며 인증, 인가의 과정을 마쳤다. 이제 인증 및 인가 작업에서 발생하는 예외에 대해서 처리를 해주어야 하는데, 한 가지 생각해봐야 하는 문제가 있다. 스프링 서큐리티는 필터에 기반한 체이닝 구조이므로, 스프링 컨테이너까지 요청이 도달하지 않는다. 따라서, @ExceptionHandler를 통한 편한 예외 처리가 불가하다. 직접 Try - catch로 잡아서 응답을 내려주는 방법 밖엔 없다. 하지만, 스프링 서큐리티가 그렇게 허술하진 않다. 서큐리티 필터 체인의 구조를 보면 마지막 즈음에 예외를 처리하는 필터가 있는 것을 확인할 수 있다. 여기서 주로 사용하는 AuthenticationEntryPoint와 AccessDeniedHandler를 구현해 인증 및 인가 과정에서 일어난 예외에 대.. 2022. 8. 21. Spring Security [1] - JWT를 이용한 REST API 인증과 인가 기존 인증은 JWT를 이용한 필터로, 인가는 인터셉터로 애노테이션을 정의해 손수 구현했었다. 이번에 리팩터링을 하면서, 스프링이 제공하는 보안 관련 프레임워크인 서큐리티를 사용해보자는 결정을 내려 도입하게 되었다. 어렵다고는 얼핏 들었지만, 이렇게 오래 걸릴 줄 몰랐다. 여러 블로그들을 참조하고, 잘 읽히지도 않는 공식문서들을 보아도 도무지 이해가 가지 않았다. 일단 머릿속에 그려져야 감이 잡히는데, 이건 뭐 필터도 여러 개이며 구현체도 왜 이렇게 많은지 그에 맞는 책임과 역할이 도저히 감이 오지 않는다. 전부 추상화 되어 있어 커스텀해서 사용하기는 편하게 되었다는데, 전반적으로 모든 내용을 이해하기엔 쉽지 않기도 하고 따로 공부가 필요한 프레임워크라고 생각한다. 거진 1주 반이 넘어서야 내가 구현하고자.. 2022. 8. 18. 코드 리팩토링 [1] 지난 1주일간 기존 프로젝트의 리팩터링을 위해 새로운 저장소를 생성했다. 아키텍처 부분 설계를 거의 2, 3일은 한 것 같다. 아직 수정이 필요하겠지만, 항상 고민해보자. 기존 프로젝트는 multi module로 진행했지만, 완벽한 멀티 모듈 프로젝트 이진 않았다. 모놀리틱으로 갈지, MSA를 고려해 모듈간 분리를 할지가 계속 고민된다.. 확장성을 위해 모듈, 패키지간 의존성 분리를 틈틈이 고려해봐야겠다. 기존 작성 코드를 옮기며 조금 더 클린한 객체지향적인 코드로 리뷰어님의 피드백을 통해 수정해나갔다. 많이 알고 있었다고 생각한 부분에서도 헛점이 있었고, 전혀 알지 못했던 디테일한 부분도 알아나가는 중이다. 인증 및 인가 부분은 기존 프로젝트에서는 손수 구현했지만, 이번에는 Spring Security.. 2022. 8. 3. 2022.05.20 《스프링 부트 권한 처리》 스프링 부트 프로젝트 중이다. jwt를 이용한 인증은 다 끝났고 인가 작업만 남았다. 대부분 스프링 서큐리티를 사용해서 권한 처리를 하는듯하다. 나는 일단 서큐리티를 사용하지 않고 짜고 있기 때문에 고민을 좀 많이 해봤다. 결론을 내리자면 인터셉터를 이용하기로 결심했다. 관리자인지 회원인지 인증이 필요한 작업이든지 중복되는 로직이 너무 많아지므로 이것은 인터셉터에서 컨트롤러로 넘어가기 전에 인가 작업을 해줘야 하는 것이 주된 이유다. 한번 해보자~ => 전반적인 계획 작성 중간 정리 혼자 프로젝트를 해서 인지 속도가 너무 나질 않는다. 생각을 해보았다. 어느 한 기능이든 유지보수가 용이하게 설계하기 때문이라는 생각이 들었다. 가장 시간을 많이 쏟은 부분은 Restful 한 설계 방식과 인증 인가 부분이다.. 2022. 5. 20. 2022.05.14 「JWT 인증」 인증을 구현하기 위해 기존에 사용하던 Session 로그인이 아닌 JWT를 이용하여 인증을 구현했다. 토큰을 처음 사용했다 보니 알아가는데 너무 오래 걸렸다. 무엇보다 나는 스프링 시큐리티를 사용하지 않고 서블릿 필터나 스프링 인터셉터를 이용해 토큰 유효성 검사를 하려고 했어서 더 쉽지 않았던 것 같다. 이번 프로젝트 인증에서 Session을 사용하지 않은 이유는 서버의 규모가 확장될 때의 인증 문제이기 때문인데 JWT를 이용한 인증도 여러 가지가 있기 때문에 나의 프로젝트에 맞는 단계가 어디인지에 상당히 헷갈렸던 한 주였다. 인증 작업을 하며 문제가 생겼던 부분이나 구현한 부분에 대해 정리를 해보겠다. Rest API를 설계할 때 인증은 session 기반이 아닌 토큰 기반으로 하는 것이 더 restf.. 2022. 5. 14. 이전 1 다음 반응형