[Spring Boot] Gateway에서 인가 처리 (Filter)

2025. 3. 21. 11:32· BE/Spring Boot
목차
  1. Gateway에서 인가 처리
  2. JwtFilter
  3. application.yml 설정
  4. 사용자 정보 담기
  5. JwtFilter
  6. JwtUtil
728x90

Gateway에서 인가 처리

JwtFilter

spring cloud gateway에서 제공해주는 AbstractGatewayFilterFactory 필터를 사용해줘야 한다.

import com.example.apigateway.utils.JwtUtil;
import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
import org.springframework.http.HttpCookie;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.stereotype.Component;
@Component
public class JwtFilter extends AbstractGatewayFilterFactory<JwtFilter.Config> {
public static class Config {}
public JwtFilter() {
super(Config.class);
}
@Override
public GatewayFilter apply(Config config) {
return (((exchange, chain) -> {
System.out.println("JwtFilter 실행됨");
System.out.println(JwtUtil.generateToken(1L, "test01@test.com", "ROLE_USER"));
// 토큰 확인하는 기능
ServerHttpRequest request = exchange.getRequest(); // 사용자 요청 받아오기
HttpCookie cookie = request.getCookies().getFirst("ATOKEN"); // 토큰 받아오기
// 쿠키가 없으면 실패 처리
if(cookie == null) {
return exchange.getResponse().setComplete();
}
String token = cookie.getValue();
if (!JwtUtil.validate(token)) {
// 실패 처리
return exchange.getResponse().setComplete();
}
return chain.filter(exchange);
}));
}
}

 

 

 

application.yml 설정

원하는 path의 아래에다가 filter를 등록해준다.

spring:
application:
name: api-gateway
cloud:
gateway:
routes:
- id: api-board
uri: lb://api-board
predicates:
- Path=/board/**
filters:
- JwtFilter

 

 


사용자 정보 담기

JwtFilter

토큰에서 유저의 idx와 email을 받아와서 header에 세팅한다.

// 토큰에서 idx와 email을 받아와서 header에 세팅
ServerHttpRequest newRequest = exchange.getRequest().mutate()
.header("X-User-Idx", String.valueOf(JwtUtil.getUserIdx(token)))
.header("X-User-Email", JwtUtil.getUserEmail(token))
.build();
ServerWebExchange newExchange = exchange.mutate().request(newRequest).build();
return chain.filter(newExchange);

 

 

JwtUtil

토큰을 받아와서 idx와 email을 반환해주는 메소드 작성

public static Long getUserIdx(String token) {
return Jwts.parserBuilder()
.setSigningKey(SECRET)
.build()
.parseClaimsJws(token)
.getBody().get("userIdx", Long.class);
}
public static String getUserEmail(String token) {
return Jwts.parserBuilder()
.setSigningKey(SECRET)
.build()
.parseClaimsJws(token)
.getBody().get("userEmail", String.class);
}
728x90
저작자표시 비영리 변경금지 (새창열림)

'BE > Spring Boot' 카테고리의 다른 글

[Spring Boot] 로그(Logging)  (0) 2025.03.29
[Spring Boot] CQRS  (0) 2025.03.29
[Spring Boot] Eureka란? / 스프링 부트에서 Eureka, Gateway 설정  (0) 2025.03.19
[Spring Boot] 멀티 모듈 프로젝트 생성 / API Gateway 연결  (0) 2025.03.18
[Spring Boot] Spring Cloud란? / Spring Cloud Gateway  (0) 2025.03.18
  1. Gateway에서 인가 처리
  2. JwtFilter
  3. application.yml 설정
  4. 사용자 정보 담기
  5. JwtFilter
  6. JwtUtil
'BE/Spring Boot' 카테고리의 다른 글
  • [Spring Boot] 로그(Logging)
  • [Spring Boot] CQRS
  • [Spring Boot] Eureka란? / 스프링 부트에서 Eureka, Gateway 설정
  • [Spring Boot] 멀티 모듈 프로젝트 생성 / API Gateway 연결
셰욘
셰욘
셰욘
seiyeon
셰욘
전체
오늘
어제
  • 분류 전체보기 (176)
    • 알고리즘 (46)
      • 프로그래머스 (2)
      • 백준 (37)
      • 문제 유형 (7)
    • CS (41)
      • Linux (6)
      • DB (15)
      • 자료구조 (3)
      • OOP (2)
      • 아키텍처 (0)
    • BE (42)
      • Java (9)
      • Spring Boot (32)
    • FE (6)
      • Next.js (1)
      • JavaScript (5)
      • Vue.js (7)
      • Web (0)
    • 배포 (5)
    • 회고 (19)
      • BEYOND SW 캠프 (19)
    • 기타 (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 블로그 관리

공지사항

인기 글

태그

  • be
  • js
  • bfs
  • 티스토리챌린지
  • Gateway
  • 실습
  • AWS
  • 백준
  • 오블완
  • dfs
  • 프로그래머스
  • web
  • Java
  • 백트래킹
  • DP
  • 알고리즘
  • 자료구조
  • 우선순위 큐
  • 구현
  • 주간회고
  • 회고
  • fe
  • 리눅스
  • db
  • 네트워크
  • 트리
  • vue
  • 그리디
  • spring boot
  • cs

최근 댓글

최근 글

250x250
hELLO · Designed By 정상우.v4.2.1
셰욘
[Spring Boot] Gateway에서 인가 처리 (Filter)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.