티스토리 뷰
이전 포스팅을 통해 JWT 토큰의 생성과 검증을 담당하는 JwtUtil을 작성했다.
[Spring Security - JWT] (2) : JwtUtil
https://ekeprl.tistory.com/63 [Spring Security - JWT] (1) : SecurityConfig 설정https://ekeprl.tistory.com/62 [Spring Security] 세션 기반 vs JWT 기반https://ekeprl.tistory.com/30 Spring Security (1)Spring boot : 3.1Spring Security6Kotlin Spring secu
ekeprl.tistory.com
이번 포스팅은 매 요청마다 JWT 토큰을 검증하는 JwtFilter를 작성해보려 한다.
1.JwtFilter
@Component
class JwtFilter(
private val jwtUtil: JwtUtil
) : OncePerRequestFilter() {
override fun doFilterInternal(
request: HttpServletRequest,
response: HttpServletResponse,
filterChain: FilterChain
) {
val token = resolveToken(request)
if (token != null && jwtUtil.validateToken(token)) {
val userId = jwtUtil.getUserId(token)
val auth = UsernamePasswordAuthenticationToken(
userId, null, emptyList()
)
SecurityContextHolder.getContext().authentication = auth
}
filterChain.doFilter(request, response)
}
private fun resolveToken(request: HttpServletRequest): String? {
val bearer = request.getHeader("Authorization") ?: return null
return if (bearer.startsWith("Bearer ")) bearer.substring(7) else null
}
}
2. 주요 동작 설명
(1) OncePerRequestFilter
private val jwtUtil: JwtUtil
) : OncePerRequestFilter() {
매 요청마다 한 번씩만 실행되도록 OncePerRequestFilter()를 상속받아 작성했다.
(2) resolveToken
private fun resolveToken(request: HttpServletRequest): String? {
val bearer = request.getHeader("Authorization") ?: return null
return if (bearer.startsWith("Bearer ")) bearer.substring(7) else null
}
요청 헤더의 Authrization값에서 토큰을 추출한다.
단, Bearer 로 시작하는 경우에만 토큰을 파싱 하고, 그 외의 값은 null을 반환하도록 작성했다.
(3) doFilterInternal
val token = resolveToken(request)
if (token != null && jwtUtil.validateToken(token)) {
val userId = jwtUtil.getUserId(token)
val auth = UsernamePasswordAuthenticationToken(
userId, null, emptyList()
)
SecurityContextHolder.getContext().authentication = auth
}
filterChain.doFilter(request, response)
추출한 토큰이 유효한값일 경우, UsernamePasswordAuthenticationToken을 생성해 SecurityContextHolder에 등록한다.
이후 Spring Security는 이 인증정보를 바탕으로 요청을 처리한다.
*토큰이 없거나, 유효하지 않은 경우에는 인증 정보를 등록하지 않고 다음 필터로 넘긴다.
이상 JwtFilter 작성을 알아보았습니.
다음 포스팅은 로그인 API 작성 및 Postman 테스트를 진행해보려 합니다.
감사합니다.
'Spring > Security(JWT)' 카테고리의 다른 글
| [Spring Security - JWT] (5) : Refresh Token 구현 (0) | 2026.04.28 |
|---|---|
| [Spring Security - JWT] (4) : 로그인 API 및 Postman 테스트 (0) | 2026.04.27 |
| [Spring Security - JWT] (2) : JwtUtil (1) | 2026.04.24 |
| [Spring Security - JWT] (1) : SecurityConfig 설정 (0) | 2026.04.22 |
| [Spring Security] 세션 기반 vs JWT 기반 (2) | 2026.04.21 |
- Total
- Today
- Yesterday
- Spring Security
- CRUD
- MariaDB
- session저장
- AI
- null
- 특일정보
- insert
- 백엔드
- JAR매니패스트
- jwt
- 의존성
- Postman
- gradle
- dbeaver
- 서버호스트
- InetAddress
- springsecurity
- dependencies
- 명령줄이 너무 깁니다
- Powershell
- kotlin
- GitHub
- Insert오류
- securityconfig
- spring ai
- Git
- 게시판
- Column count doesn't match value count at row 1
- ubuntu
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 | 31 |