DEV Community

Allan Ramiro Flores Murillo
Allan Ramiro Flores Murillo

Posted on

Spring Cloud Gateway WebFlux 4.0.6

Aporte para el mundo de habla Hispana.

La libreria Spring Cloud Gateway WebFlux.

En mi opinion personal me parece fenomenal y fantastico la configuración
del enrutamiento dinamico, sin que tengamos hacer mucho codigo de programación eso es fanatisco.

Pero para los que aun tengan dudas y no tenga claro el funcionamiento de Spring Gateway intentera de aportar, mi propia experiencia configurandolo, eh equivocandome varias veces y una noche.

Supongamos que vamos hacer una peticion o llamada
de origen o request de origen, mediante el siguente enlace:

http://localhost:7000/certeza/api/asegurados

En nuestro archivo de spring gateway quizas tengamos un
ejemplo como el siguiente:

uri: lb://servicio-asegurados
predicates:
- Path=/certeza/**
filters:
- PreserveHostHeader
- RewritePath=/certeza/?(?.*), /${segment}

La palabra , es solo un alias, un nombre asignado
aletoremente.

Lo que realmente importa, es continua despues de la palabra

lo que viene, inmendiatamente despues, lo que realmente importa:

Eso debe hacer mach o coincidir con exactitud a nombre de nuestra
ruta real de api de nuestro microservicio.

Transformado, el resultado seria:

/api/asegurados !! Esto es lo que realmente nos importa en la llamada

Para analizarlo de forma que vamos convega, adjunto el codigo en java
para que tambien puedas analizarlo y probarlo por tu cuenta.

String url = "http://localhost:7000/certeza/api/asegurados";
String regexp = "/certeza/?(?.*)";
String rutaDestino = "/${segment}";

String respuesta = url.replaceAll(regexp, rutaDestino);
System.out.println(respuesta);

Resultado: --> http://localhost:7000/api/asegurados

Pero aqui viene la pregunta del millon:

Como hace sabe Spring-Gateway a donde debe enviar esa direccion y enviarla al luegar correcto:

pues mediante:

uri: lb://servicio-asegurados

esta linea de configuración el archivo de configuración de spring gateway le dice al motor interno de sprin-gateway ds a donde debe ser redirigido.

http://localhost:8001/api/asegurados

vuela..!!

esa es la verdadera magia de Spring-Gateway

eso es fantastico, porque al front-end le evita, tener que cambiar sus rutas de origen para el aprovisionamiento de datos.

tambien facilita enormemente el trabajo de la SecurityFilterChain

@bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception
{
http.csrf(cus->cus.disable())
.userDetailsService(userDetailsService)
.sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
.authorizeHttpRequests(aut-> aut
.requestMatchers(HttpMethod.POST,"/api/asegurados").hasAnyRole("ADMIN","OPERATOR")
.requestMatchers(HttpMethod.PUT,"/api/asegurados").hasAnyRole("ADMIN","OPERATOR")
.requestMatchers(HttpMethod.DELETE,"/api/asegurados/").hasRole("ADMIN")
.requestMatchers("/v3/api-docs/
", "/swagger-ui/", "/swagger-ui.html").permitAll()
.requestMatchers("/api/
").authenticated()
)
.addFilterBefore(jwtRequestFilter, UsernamePasswordAuthenticationFilter.class);

return http.build();
}

Top comments (0)