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)