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 통합 예시 흐름
- 사용자가 ID/PW로 로그인 요청
- 서버가 사용자 인증 → JWT 토큰 생성
- 클라이언트에 JWT 응답
- 클라이언트는 이후 요청 시 Authorization: Bearer <JWT> 헤더로 전달
- 서버는 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
'백엔드 > Spring' 카테고리의 다른 글
대용량 필드의 중복 검사 방법 (1) | 2025.06.20 |
---|---|
IntelliJ 무료버전, Spring Test 폴더 생성 및 실행 방법 (0) | 2025.06.16 |
Spring Data JPA 에서 Projection이 작동하는 방식 (1) | 2025.06.11 |
Kafka, Spring Boot 실습 (0) | 2025.05.21 |
Spring, 403 AccessDenied 오류(적용하지 않은 어노테이션이 적용됨) (0) | 2025.04.08 |