카테고리 없음

게이트웨이 필터 예시

jw-backend 2024. 10. 9. 01:43
반응형

Spring Cloud Gateway에서 인증 헤더를 처리하는 필터를 구현한 것입니다. 주요 기능은 다음과 같습니다:

  1. 클래스 구조:
    • AuthHeaderFilter는 AbstractGatewayFilterFactory를 상속받아 필터를 생성합니다.
    • TokenService를 주입받아 인증 토큰을 검증하는 데 사용합니다.
  2. 필터 적용:
    • apply 메서드에서 요청의 Authorization 헤더를 검사합니다.
    • 헤더가 존재하고 "Bearer "로 시작하는 경우, 해당 토큰을 추출합니다.
    • TokenService를 통해 토큰의 유효성을 검증합니다.
  3. 토큰 검증:
    • 토큰이 유효하지 않으면 RuntimeException을 발생시키고, 검증에 실패한 경우 에러를 반환합니다.
    • 헤더가 없거나 형식이 맞지 않으면, 적절한 오류 메시지를 반환합니다.

이 필터는 인증이 필요한 API 요청에 대해 Bearer 토큰을 검증하여, 안전한 서비스 접근을 보장합니다.

 

@Component
@Slf4j
public class AuthHeaderFilter extends AbstractGatewayFilterFactory<AuthHeaderFilter.Config> {

    @Autowired
    private TokenService tokenService; // TokenService 주입

    public AuthHeaderFilter() {
        super(Config.class);
    }

    @Override
    public GatewayFilter apply(Config config) {
        return (exchange, chain) -> {
            String authorizationHeader = exchange.getRequest().getHeaders().getFirst("Authorization");
            if (authorizationHeader != null && authorizationHeader.startsWith("Bearer ")) {
                String token = authorizationHeader.substring(7); // "Bearer " 제거
                // 토큰 검증
                return tokenService.validateToken(token)
                        .flatMap(isValid -> {
                            if (!isValid) {
                                return Mono.error(new RuntimeException("Invalid token")); // 검증 실패 시 에러 반환
                            }
                            return chain.filter(exchange);
                        });
            } else {
                return Mono.error(new RuntimeException("Missing Authorization header")); // 헤더 없음 처리
            }
        };
    }

    public static class Config {
        // 필요에 따라 설정 추가
    }
}