Spring Security 고급 기능

moon.kick·2025년 4월 17일

좋아, 이건 Spring Security 고급 기능에서 가장 중요한 3대 주제야.
아래 순서대로 정말 잘 정리해줄게.


✅ 1. JWT 기반 인증 흐름 (🔐 가장 중요)

📌 개요

  • 서버가 세션을 저장하지 않고, 토큰 자체에 인증 정보를 담아 클라이언트에 보냄
  • 사용자 인증 후 JWT를 발급 → 클라이언트가 이후 요청에 Authorization: Bearer <token>을 보냄

🔄 인증 흐름 요약

[1] 로그인 요청 (ID/PW)
   ↓
[2] 서버에서 사용자 인증 → JWT 발급
   ↓
[3] JWT를 클라이언트에 전달 (보통 Authorization 헤더 또는 쿠키)
   ↓
[4] 이후 요청에 JWT 포함 → 서버는 JWT를 검증하고 사용자 인증 처리

🛠 주요 클래스 구성

구성 요소설명
JwtAuthenticationFilter요청에서 JWT를 꺼내고 검증하여 SecurityContext에 사용자 설정
JwtProvider토큰 생성, 검증 유틸
SecurityConfigJWT 필터를 UsernamePasswordAuthenticationFilter 앞에 추가
UserDetailsService사용자 정보 조회 로직

✅ 핵심 설정 (예시)

http
  .csrf().disable()
  .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
  .and()
  .addFilterBefore(jwtFilter, UsernamePasswordAuthenticationFilter.class)
  .authorizeHttpRequests(auth -> auth
    .requestMatchers("/login", "/signup").permitAll()
    .anyRequest().authenticated()
  );

✅ 2. Spring Security Filter Chain 구조도 (🔄 기본 흐름 이해용)

클라이언트 요청
   ↓
SecurityContextPersistenceFilter
   ↓
UsernamePasswordAuthenticationFilter  ← 로그인 인증
   ↓
ExceptionTranslationFilter            ← 인증 실패/예외 처리
   ↓
FilterSecurityInterceptor             ← 인가(권한) 검사
   ↓
컨트롤러 → 서비스 → 리포지토리

✅ 이 구조는 "필터 체인으로 처리되는 보안 흐름" 이며,
jwtFilterUsernamePasswordAuthenticationFilter 앞에 들어가야 정상 작동함.


✅ 3. 로그인/로그아웃 커스터마이징 (🔓 실무에서 매우 중요)

🔑 커스터마이징 항목

기능설정 방식
로그인 페이지 변경.formLogin().loginPage("/my-login")
로그인 성공/실패 핸들러.successHandler(), .failureHandler()
로그아웃 URL 변경.logout().logoutUrl("/logout")
로그아웃 성공 후 이동.logoutSuccessUrl("/")
세션 무효화, 쿠키 삭제.invalidateHttpSession(true).deleteCookies("JSESSIONID")

🔍 예시 코드

http
  .formLogin()
    .loginPage("/login")
    .successHandler(customSuccessHandler)
    .failureHandler(customFailureHandler)
  .and()
  .logout()
    .logoutUrl("/custom-logout")
    .logoutSuccessUrl("/login?logout")
    .invalidateHttpSession(true)
    .deleteCookies("JSESSIONID");

✅ 요약 정리

항목중요도설명
JWT 인증★★★★★세션 없는 토큰 기반 인증. 모바일/SPA 필수
필터 체인 구조★★★★☆보안 흐름 구조 이해에 필수
로그인/로그아웃 커스터마이징★★★★☆실무에서 사용자 경험 개선용 핵심

💡원하면:

  • JWT 직접 구현 실습 코드
  • OAuth2 with Google/Naver/GitHub
  • 토큰 재발급 (Refresh Token) 흐름
  • 세션 vs JWT vs OAuth 비교표

같은 것도 바로 해줄게!

계속 해볼까? 😎

profile
@mgkick

0개의 댓글