<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Allan Ramiro Flores Murillo</title>
    <description>The latest articles on DEV Community by Allan Ramiro Flores Murillo (@afloreshn).</description>
    <link>https://dev.to/afloreshn</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3974851%2Fa19acd65-1b5a-48e7-9f85-820c0375b241.jpg</url>
      <title>DEV Community: Allan Ramiro Flores Murillo</title>
      <link>https://dev.to/afloreshn</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/afloreshn"/>
    <language>en</language>
    <item>
      <title>Spring Cloud Gateway WebFlux 4.0.6</title>
      <dc:creator>Allan Ramiro Flores Murillo</dc:creator>
      <pubDate>Mon, 08 Jun 2026 22:27:22 +0000</pubDate>
      <link>https://dev.to/afloreshn/spring-cloud-gateway-webflu-406-2ld9</link>
      <guid>https://dev.to/afloreshn/spring-cloud-gateway-webflu-406-2ld9</guid>
      <description>&lt;p&gt;Aporte para el mundo de habla Hispana.&lt;/p&gt;

&lt;p&gt;La libreria Spring Cloud Gateway WebFlux.&lt;/p&gt;

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

&lt;p&gt;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. &lt;/p&gt;

&lt;p&gt;Supongamos que vamos hacer una peticion o llamada&lt;br&gt;
de origen o request de origen, mediante el siguente enlace:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://localhost:7000/certeza/api/asegurados" rel="noopener noreferrer"&gt;http://localhost:7000/certeza/api/asegurados&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En nuestro archivo de spring gateway quizas tengamos un&lt;br&gt;
ejemplo como el siguiente:&lt;/p&gt;

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

&lt;p&gt;La palabra , es solo un alias, un nombre asignado&lt;br&gt;
aletoremente.&lt;/p&gt;

&lt;p&gt;Lo que realmente importa, es continua despues de la palabra&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;lo que viene, inmendiatamente despues, lo que realmente importa:&lt;/p&gt;

&lt;p&gt;Eso debe hacer mach o coincidir con exactitud a nombre de nuestra&lt;br&gt;
ruta real de api de nuestro microservicio.&lt;/p&gt;

&lt;p&gt;Transformado, el resultado seria:&lt;/p&gt;

&lt;p&gt;/api/asegurados !! Esto es lo que realmente nos importa en la llamada&lt;/p&gt;

&lt;p&gt;Para analizarlo de forma que vamos convega, adjunto el codigo en java&lt;br&gt;
para que tambien puedas analizarlo y probarlo por tu cuenta.&lt;/p&gt;

&lt;p&gt;String url = "&lt;a href="http://localhost:7000/certeza/api/asegurados" rel="noopener noreferrer"&gt;http://localhost:7000/certeza/api/asegurados&lt;/a&gt;";&lt;br&gt;
String regexp = "/certeza/?(?.*)";&lt;br&gt;
String rutaDestino = "/${segment}";&lt;/p&gt;

&lt;p&gt;String respuesta = url.replaceAll(regexp, rutaDestino);&lt;br&gt;
System.out.println(respuesta);&lt;/p&gt;

&lt;p&gt;Resultado: --&amp;gt; &lt;a href="http://localhost:7000/api/asegurados" rel="noopener noreferrer"&gt;http://localhost:7000/api/asegurados&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pero aqui viene la pregunta del millon:&lt;/p&gt;

&lt;p&gt;Como hace sabe Spring-Gateway a donde debe enviar esa direccion y enviarla al luegar correcto:&lt;/p&gt;

&lt;p&gt;pues mediante:&lt;/p&gt;

&lt;p&gt;uri: lb://servicio-asegurados&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://localhost:8001/api/asegurados" rel="noopener noreferrer"&gt;http://localhost:8001/api/asegurados&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;vuela..!!&lt;/p&gt;

&lt;p&gt;esa es la verdadera magia de Spring-Gateway&lt;/p&gt;

&lt;p&gt;eso es fantastico, porque al front-end le evita, tener que cambiar sus rutas de origen para el aprovisionamiento de datos.&lt;/p&gt;

&lt;p&gt;tambien facilita enormemente el trabajo de la SecurityFilterChain&lt;/p&gt;

&lt;p&gt;&lt;a class="mentioned-user" href="https://dev.to/bean"&gt;@bean&lt;/a&gt;&lt;br&gt;
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception&lt;br&gt;
    {&lt;br&gt;
        http.csrf(cus-&amp;gt;cus.disable())&lt;br&gt;
        .userDetailsService(userDetailsService)&lt;br&gt;
           .sessionManagement(session -&amp;gt; session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))&lt;br&gt;
            .authorizeHttpRequests(aut-&amp;gt; aut&lt;br&gt;
            .requestMatchers(HttpMethod.POST,"/api/asegurados").hasAnyRole("ADMIN","OPERATOR")&lt;br&gt;
            .requestMatchers(HttpMethod.PUT,"/api/asegurados").hasAnyRole("ADMIN","OPERATOR")&lt;br&gt;
            .requestMatchers(HttpMethod.DELETE,"/api/asegurados/&lt;strong&gt;").hasRole("ADMIN")&lt;br&gt;
            .requestMatchers("/v3/api-docs/&lt;/strong&gt;", "/swagger-ui/&lt;strong&gt;", "/swagger-ui.html").permitAll()&lt;br&gt;
            .requestMatchers("/api/&lt;/strong&gt;").authenticated()&lt;br&gt;
            )&lt;br&gt;
            .addFilterBefore(jwtRequestFilter, UsernamePasswordAuthenticationFilter.class);&lt;br&gt;&lt;br&gt;
        return http.build(); &lt;br&gt;
    }&lt;/p&gt;

</description>
      <category>api</category>
      <category>java</category>
      <category>spanish</category>
      <category>springboot</category>
    </item>
  </channel>
</rss>
