본문 바로가기
백엔드/Spring

Spring Security + JWT

by greenyellow-s 2025. 6. 19.
728x90

Spring Security 란

Spring Security는 Spring 기반 애플리케이션의 보안을 담당하는 강력한 인증 및 권한 부여 프레임워크이다.

주요 기능

  • 인증(Authentication): 사용자가 누구인지 확인 (예: 로그인)
  • 인가(Authorization): 사용자가 어떤 리소스에 접근할 수 있는지 확인 (예: 관리자만 접근 가능한 페이지)
  • 보안 정책 설정: URL 별 접근 제어, CSRF 보호, 세션 관리 등
  • 다양한 인증 방식 지원: Form Login, OAuth2, Basic Auth, JWT 등

 

동작 구조 (간단 흐름)

클라이언트 요청 
↓ 
[Spring Security Filter Chain] 
↓ 
AuthenticationManager → UserDetailsService → 인증 성공/실패 처리 
↓ 
SecurityContext 에 인증 정보 저장 
↓ 
Controller 로 요청 전달
 

JWT란?

JWT (JSON Web Token)는 인증 정보를 담고 있는 토큰 기반 인증 방식입니다.

 

구성

JWT는 총 3개의 파트로 이루어져 있습니다:

헤더.header.페이로드.payload.서명.signature
 

 

장점

  • 서버가 세션을 유지하지 않아도 됨 → 무상태(stateless) 인증 가능
  • 토큰 안에 사용자 정보를 담을 수 있음 → 매 요청마다 정보 확인 가능

 


Spring Security + JWT 통합 예시 흐름

  1. 사용자가 ID/PW로 로그인 요청
  2. 서버가 사용자 인증 → JWT 토큰 생성
  3. 클라이언트에 JWT 응답
  4. 클라이언트는 이후 요청 시 Authorization: Bearer <JWT> 헤더로 전달
  5. 서버는 JWT를 검증 후, 인증된 사용자로 요청 처리

 

로직 정리

[로그인 요청]
↓
[아이디/비밀번호 인증 성공]
↓
[JWT 발급 - createToken()]
↓
[응답에 JWT 포함 + VO 응답]
↓
[클라이언트 저장]
↓
[Authorization: Bearer <토큰> 으로 요청]
↓
[JWTAuthenticationFilter: 토큰 검증]
↓
[SecurityContext 에 인증 정보 저장]
↓
[컨트롤러에서 사용자 정보 사용]

 

 

 


파일 구조

src/main/java/kr/co/onmediagroup/onoffapi/
│
├── config/
│   ├── JWTConfig.java            // JWT 설정
│   └── SecurityConfig.java       // 스프링 시큐리티 설정
│
├── filter/
│   └── JWTAuthenticationFilter.java  // JWT 인증 필터
│
├── controllerAdvice/
│   └── ApiControllerAdvice.java              // JWT 생성, 검증 유틸리티
│
├── exception/
│   └── CustomAuthenticationEntryPoint.java              // JWT 생성, 검증 유틸리티
│
├── model/
│   └── dto/User.java              // JWT 사용자 정보 DTO
│
├── util/
│   └── JWTUtil.java              // JWT 생성, 검증 유틸리티
│
└── controller/
    └── AuthController.java       // 로그인, 회원가입 컨트롤러

src/test/java/kr/co/onmediagroup/onoffapi/
│
└── util/
    └── JWTUtilTest.java              // JWT 생성, 검증 유틸리티 Test

 

클래스명 설명
JWTConfig JWT 관련 설정을 구성하는 클래스
SecurityConfig 스프링 시큐리티 설정
JWTAuthenticationFilter JWT 인증 커스텀 필터
ApiControllerAdvice REST API 전용 예외 처리 클래스
CustomAuthenticationEntryPoint 인증 실패 시 호출되는 커스텀 AuthenticationEntryPoint 구현체
User JWT 사용자 정보 DTO
JWTUtil JWT 생성, 검증 유틸리티
AuthController 로그인, 회원가입 컨트롤러

 

 

 


필요 의존성

## build.gradle ##

// security
implementation 'org.springframework.boot:spring-boot-starter-security'
testImplementation 'org.springframework.security:spring-security-test'

//JWT
// https://mvnrepository.com/artifact/com.auth0/java-jwt
implementation 'com.auth0:java-jwt:4.4.0'

 

728x90