Ist es möglich, den Routenfilter in der Anwendung zu registrieren.Properties config im Spring GatewayJava

Java-Forum
Anonymous
 Ist es möglich, den Routenfilter in der Anwendung zu registrieren.Properties config im Spring Gateway

Post by Anonymous »

Ich definiere einen benutzerdefinierten Filter im Spring Gateway -Projekt. Jetzt habe ich festgestellt, dass ich den benutzerdefinierten Filter im Code wie folgt registrieren muss: < /p>

Code: Select all

@Configuration
public class GatewayConfig {

private final JwtAuthenticationFilter filter;

public GatewayConfig(JwtAuthenticationFilter filter) {
this.filter = filter;
}

@Bean
public RouteLocator routes(RouteLocatorBuilder builder) {
return builder.routes()
.route("auth", r -> r.path("/auth/**").filters(f -> f.filter(filter)).uri("lb://auth"))
.route("music", r -> r.path("/music/**").filters(f -> f.filter(filter)).uri("lb://dolphin-music")).build();
}
}
< /code>
Wenn ich den benutzerdefinierten Filter nicht registriere, wirkt sich der Filter nicht wie erwartet aus und funktioniert nicht. Aber ich habe die Route in application bereits konfiguriert.# dolphin music
spring.cloud.gateway.discovery.locator.enabled=true
spring.cloud.gateway.discovery.locator.lower-case-service-id=true
spring.cloud.gateway.routes[0].id=dolphin-music-service
# forward by ip:port way
spring.cloud.gateway.routes[0].uri=http://10.107.64.246:11014
# forward by service name way
# spring.cloud.gateway.routes[0].uri=lb://
spring.cloud.gateway.routes[0].predicates[0]=Path=/music/**
< /code>
Ich denke, wir sollten die Routenkonfiguration sowohl in Code- als auch in der Konfigurationsdatei nicht definieren. Was soll ich tun, um den Filter nur zu registrieren? Gibt es einen besseren Weg, um mit der Situation umzugehen? Sollte ich die Route im Code definieren? Ich denke, die Konfiguration in der Datei wird flexibler.@Component
public class JwtAuthenticationFilter implements GatewayFilter {

@Value("${dolphin.gateway.jwt.verify:true}")
private boolean jwtVerfiy;

final static List apiEndpoints = List.of("/register", "/login");

final static Predicate isApiSecured = r -> apiEndpoints.stream()
.noneMatch(uri -> r.getURI().getPath().contains(uri));

@Override
public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {

return chain.filter(exchange);
}
}
Ich habe versucht, MyFilterFactory wie folgt hinzuzufügen:

Code: Select all

@Component
public class MyFilterFactory extends AbstractGatewayFilterFactory {

@Autowired
private JwtAuthenticationFilter jwtAuthenticationFilter;

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

@Override
public GatewayFilter apply(Config config) {
return jwtAuthenticationFilter;
}

public static class Config {
}

}
und definieren in Route Factory in application.Properties wie folgt:

Code: Select all

spring.cloud.gateway.routes[0].filters[0]=MyFilterFactory
Das Problem ist, dass die Anforderung nicht die jwtauthenticationFilter eingegeben habe. Ich bin definiert.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post