반응형
Spring Cloud Gateway에서 인증 헤더를 처리하는 필터를 구현한 것입니다. 주요 기능은 다음과 같습니다:
- 클래스 구조:
- AuthHeaderFilter는 AbstractGatewayFilterFactory를 상속받아 필터를 생성합니다.
- TokenService를 주입받아 인증 토큰을 검증하는 데 사용합니다.
- 필터 적용:
- apply 메서드에서 요청의 Authorization 헤더를 검사합니다.
- 헤더가 존재하고 "Bearer "로 시작하는 경우, 해당 토큰을 추출합니다.
- TokenService를 통해 토큰의 유효성을 검증합니다.
- 토큰 검증:
- 토큰이 유효하지 않으면 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 {
// 필요에 따라 설정 추가
}
}