Я пытаюсь добавить фильтр шлюза, но по какой-то причине приложение не может найти пользовательский фильтр, который я создал. Это ошибка, которую я получаю.
Мой код выглядит так:
Application.yml
spring:
cloud:
gateway:
routes:
- id: securityService
uri: http://localhost:8083
predicates:
- Method=POST
- Path=/auth/**
filters:
- MyGatewayFilterFactory
MyGatewayFilterFactory
package com.gateway.cloudstreamproducerrabbitmq;
import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
import org.springframework.http.HttpStatus;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
import java.util.List;
@Component
public class MyGatewayFilterFactory extends AbstractGatewayFilterFactory<MyGatewayFilterFactory.Config> {
public MyGatewayFilterFactory() {
super(Config.class);
}
private boolean isAuthorizationValid(String authorizationHeader) {
boolean isValid = true;
// Logic for checking the value
return isValid;
}
private Mono<Void> onError(ServerWebExchange exchange, String err, HttpStatus httpStatus) {
ServerHttpResponse response = exchange.getResponse();
response.setStatusCode(httpStatus);
return response.setComplete();
}
@Override
public GatewayFilter apply(Config config) {
return (exchange, chain) -> {
ServerHttpRequest request = exchange.getRequest();
System.out.println("Test");
if (!request.getHeaders().containsKey("Authorization")) {
return this.onError(exchange, "No Authorization header", HttpStatus.UNAUTHORIZED);
};
String authorizationHeader = request.getHeaders().get("Authorization").get(0);
if (!this.isAuthorizationValid(authorizationHeader)) {
return this.onError(exchange, "Invalid Authorization header", HttpStatus.UNAUTHORIZED);
}
ServerHttpRequest modifiedRequest = exchange.getRequest().mutate().
header("secret", "RANDOMRANDOMRANDOM").
build();
return chain.filter(exchange.mutate().request(modifiedRequest).build());
};
}
public static class Config {
// Put the configuration properties
}
}
Если я забыл предоставить некоторую информацию, дайте мне знать. Я обновлю этот пост.
Я раньше не работал с фильтрами, поэтому я все еще новичок в этом.