개인 프로젝트를 스프링 시큐리티를 쓰지 않고, 세션과 쿠키 그리고 스프링 인터셉터를 활용하여 인증과 인가 및 로그인 처리까지 성공적으로 수행할 수 있었습니다.
그런데 다른 사람들의 프로젝트는 대부분 기본적인 세션을 쓰는 대신에 스프링 시큐리티를 사용하여 인증과 인가 작업을 수행하는 것을 알 수 있었습니다.
어떤 좋은 기술이든 좋다고 무분별하게 쓰는 것이 아니라, 써야 되는 이유를 분명히 알아야 한다고 생각하기 때문에 이와 관련된 글을 작성해봤습니다.
스프링 시큐리티란 ?
스프링 기반의 어플리케이션 보안을 위해 인증과 권한 부여를 사용하여 접근을 제어하는 프레임워크
< 특징 >
1. 모든 URL을 가로채 인증을 요구
2. 로그인 폼을 생성
3. CSRF 공격을 막는다.
4. 인터셉터가 아닌 필터 기반으로 MVC와 분리되어 동작
5. 요청 헤더 보안
< 스프링 시큐리티가 제공하는 필터 종류 >
스프링 시큐리티는 위와 같은 필터들을 체인처럼 엮어놓아 구성합니다. 모든 request들은 위와같은 필터체인을 반드시 거쳐야 서블릿에 정상적으로 도달 할 수 있습니다.
보안과 인증 및 인가와 같은 작업을 스프링시큐리티를 쓰지 않는다면, 위와 같은 필터들을 개발자가 직접 구현을 해야 됩니다. 스프링 시큐리티는 개발자에게 이와 같은 부담을 덜어주어 손쉽게 인증, 인가 및 보안 작업을 가능토록 합니다.
그렇다면 스프링 시큐리티가 제공하는 각각의 필터들은 어떠한 기능을 수행하는지 살펴보도록 하겠습니다.
1. SecurityContextPersistenceFilter - request 발생 시 SecurityContext 객체의 생성, 저장, 조회를 담당하는 필터입니다.
2. LogoutFilter - 유저의 로그아웃을 처리하는 필터입니다.
3. UsernamePasswordAuthenticationFilter - 설정된 로그인 url로 오는 요청을 감시, 유저 인증을 처리하는 필터입니다.
4. DefaultLoginPageGeneratingFilter - 이름에서 알수 있듯이, 별도의 로그인 페이지가 없으면 기본 로그인 페이지를 제공해주는 필터입니다.
5. BasicAuthenticationFilter - HTTP요청의 인증헤더를 처리하여 결과를 SecuriyContextHolder에 저장하는 필터입니다.
6. RememberMeAuthenticationFilter - SecuriyContext에 인증 객체가 있는지 확인하고 RememberMeService를 구현한 객체의 요청이 있을 시 관련 인증토큰으로 context에 주입하는 필터입니다.
7. SecurityContextHolderAwareRequestFilter - 서블릿 API보안 메소드를 구현한 래퍼를 활용하는 요청에 대한 책임을 지닌 필터입니다.
정리하자면, 스프링 시큐리티는 인증 및 인가 그리고 보안과 관련하여 체계적으로 많은 옵션을 제공해주기 때문에 개발자 입장에서 관련 로직을 하나하나 개발하지 않아도 되는 장점을 지녔기 때문에, 사용한다면 개발 능률면에서 큰 도움이 될것으로 생각됩니다.
'Spring' 카테고리의 다른 글
스프링과 스프링부트 무슨 차이가 있을까? (0) | 2022.11.25 |
---|---|
DI 인젝션이 필요한 이유는? (0) | 2022.11.19 |
스프링 컨테이너와 스프링 빈 (0) | 2022.11.03 |
스프링 mvc 동작 원리에 대하여 (0) | 2022.10.23 |
@Transactional 어노테이션 정리 (0) | 2022.05.27 |