티스토리 뷰

0. Spring Security

:: Spring 기반 웹 어플리케이션에서 보안을 담당하는 프레임 워크

  1. 인증(로그인) / 인가(권한 제어)를 중심으로 작동
  2. CSRF, CORS, 세션 제어, 비밀번호 암호화 등의 다양한 보안 기능 제공
  3. 직접 비즈니스 로직을 짜지 않아도 인증 / 인가에 대한 보안 기본 구조 제공

0.1 목적

:: Spring Security가 없다면? → 로그인 처리, 세션 유지, 권한 확인을 직접 구현 (매우 번거롭고 보안상 위험 가능성↑)

 

  • Authentication(인증) – "누구인가?"
    :: 사용자가 자신임을 증명 (ID/PW, SSO, MFA 등)
  • Authorization(인가) – "무엇을 할 수 있는가?"
    :: 해당 사용자가 요청한 리소스를 접근할 권한이 있는지 판단 (ROLE_USER, ROLE_ADMIN 등)
  • 세션 관리, JWT 지원, CSRF 보호 등 다양한 보안 기능 지원
항목 인증(Authentication) 인가(Authorization)
개념 “너 누구냐?” / Credentials “너 이거 해도 되냐?” / Authorities
예시 Verified :: 로그인 (ID/PW) Validated :: 권한 및 보안 레벨
관리자만 회원 삭제 가능
기술 MFA(2FA), SSO - OIDC(OpenID Connect) OAuth 2.0
위치 SecurityContext에 유저 정보 저장 @PreAuthorize, hasRole() 등으로 제어

0.2 고려할 점

  1. (A) 로그인 인증 확인 및 권한 인가
    :: Credential 을 통해 로그인을 하는 방식 + 로그인 된 유저 정보를 선택적으로 가져오는 방식
    • Authentication (인증, SSO) :: Credential 을 통해 유저 로그인 인증 완료
    • Authorization (인가, OAuth) :: Credential 을 통해 유저 로그인 인증 후 선택적 유저 정보 취득

  2. (B) 로그인 세션 유지
    :: 로그인 인증 완료 및 가져온 유저 정보들을, 이 정보들을 어디 저장할것인가?
    • Stateful (서버에 저장한다) = Session-based Authentication
    • Stateless (서버에 저장하지 않는다) = Token-based Authentication
      = JWT (Client Side Storage, Web 이라면 Cookie / App 이라면 자체 저장소에 저장)

0.3 동작 과정

  1) Client 
→ 2) Tomcat(Filter) 
→ 3) SecurityFilterChain :: Spring Security의 동작 기반
→ 4) DispatcherServlet 
→ 5) HandlerInterceptor 
→ 6) Controller

1) Client (클라이언트 요청)

  • 사용자의 브라우저 또는 앱이 HTTP 요청을 보냄
    예) GET /my-page, POST /login, GET /admin/data

2) Tomcat (Servlet Container / Filter)

  • Spring Boot가 내장한 Tomcat이 요청을 받음
  • 먼저 Filter가 실행(Tomcat 수준에서 등록된 Servlet Filter들이 차례로 실행됨)
  • 이 중 하나가 Spring Security의 SecurityFilterChain

3) SecurityFilterChain (Spring Security의 필터 체인)

  • 필터들이 순차적으로 실행됨 
    1) UsernamePasswordAuthenticationFilter (폼 로그인)
    2) JwtAuthenticationFilter (JWT 처리 시)
    3) ExceptionTranslationFilter (예외 처리)
    4) SecurityContextPersistenceFilter (SecurityContext 관리)
  • 인증(Authentication), 인가(Authorization) 처리 여기서 수행
  • 인증이 성공하면 SecurityContext에 유저 정보 저장
  • 인증 실패 시, 여기서 401 / 403 응답 반환 후 종료
더보기

- 왜 Spring Security는 Filter 기반인가?

출처 : ASAC 수업자료
  1. 가장 앞단에서 요청을 제어할 수 있음
    • 인증/인가 실패 시 Controller로 아예 안 넘김
    • 요청을 DispatcherServlet까지 보내기 전에 차단 가능
  2. Servlet 스펙에 맞는 필터 체인 구현
    • 내부적으로 springSecurityFilterChain이라는 이름의 FilterChainProxy를 생성해서
    • 여러 개의 Security Filter(UsernamePasswordAuthenticationFilter, ExceptionTranslationFilter 등)를 체인으로 연결함
  3. Spring Bean으로 등록 가능하게 설계
    • 일반적인 Filter는 Bean 주입이 어렵지만, Spring Security는 Filter이면서도 Spring이 관리하는 Bean이기 때문에 DI가 가능함
  • Interceptor는 Spring MVC Controller 진입 전후에 개입함
    - Spring Security는 Filter 기반이지만, Spring이 Bean으로 관리함
    - 그래서 FilterChain은 Spring 영역 + Servlet 사양을 둘 다 사용하는 구조

 


 

4. DispatcherServlet (Spring MVC의 Front Controller)

  • 보안 통과한 요청만 도착
  • Spring MVC의 중심 컨트롤러 역할
    - 요청 → 컨트롤러로 전달
    - 컨트롤러 → 응답 생성
    - 이 과정에서 Interceptor와 HandlerAdapter 등 여러 컴포넌트 동작

5. HandlerInterceptor (Spring MVC 인터셉터)

  • DispatcherServlet이 컨트롤러에 요청 전달하기 전후로 동작
  • 주로 다음 작업 수행
    1) preHandle() : 컨트롤러 진입 전에 실행 (인증 여부, 권한 재검사 등)
    2) postHandle() : 컨트롤러 로직 실행 후, 뷰 렌더링 전
    3) afterCompletion() : 요청 완료 후 (에러 여부와 관계없이)

6. Controller (비즈니스 로직 처리)

  • 요청에 맞는 Controller 메서드 실행 / 비즈니스 로직 처리 후 응답 생성
    => @RestController나 @Controller에서 @RequestMapping, @PostMapping 등으로 매핑

0.4 Tomcat Filter VS Spring Interceptor

- Spring 기반 애플리케이션에는 요청을 처리하는 두 가지 입구가 존재

출처 : ASAC 수업자료 간단하게 표현했을때, 모든 요청은 Tomcat 에 들어오면 가장 먼저 Filter 와 Intercepter 를 순서대로 걸쳐 Spring이 처리

  • Tomcat에서 관리하는 '대문' — Filter
    :: 인증 / 인가 처리
  • Spring에서 관리하는 '현관문' — Interceptor
    :: 세부적인 요청 처리
    :: 특정 API 호출이 가능한지 판단하거나, 요청과 응답에 대한 로깅 및 전처리 작업

출처 :: https://aaronryu.github.io/2021/02/14/a-tutorial-for-spring-mvc-and-security/

항목 Filter  Interceptor
관리 주체 Servlet Container (Tomcat) Spring Container (Spring Framework)
호출 시점 DispatcherServlet 이전 (가장 먼저 실행) DispatcherServlet 이후, Controller 진입 직전
등록 방식  @WebFilter, FilterRegistrationBean,
springSecurityFilterChain 등
WebMvcConfigurer.addInterceptors()
주요 목적 1) 인증
2) 로깅 및 감시
3) 이미지 혹은 데이터 압축
4) MVC 상 공통 처리 로직 
1) 세부 로깅 (AOP 로직)
2) 세부 인증
3) Spring 관련된 추가 조작 (예, Model)
커버리지 정적 리소스 포함 모든 HTTP 요청 Spring Controller를 타겟으로 한 요청만 처리
핸들러 - doFilter()
:: 요청이 DispatcherServlet.service()에
1) 진입하기 직전에 호출
2) 결과를 반환하는 직후에 호출

1) preHandle() :: 요청이 Controller 에 진입하기 직전에 호출
2) postHandle() :: 결과를 Controller 가 반환하는 직후에 호출
3) afterCompletion() :: Controller 성공/실패 결과에 따라 View를 생성한 직후에 호출 / 에러가 발생해도 수행(로그 저장에 사용)
사용 위치 주로 사용 (SecurityFilterChain은 Filter 기반) 거의 사용되지 않음 (세부 기능만 커스터마이징 시 활용)
적용 범위 애플리케이션 전역 (넓은 범위) 컨트롤러 단위 (좁은 범위)

참조 

ASAC 수업자료

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함