1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.syncope.sra.filters;
20
21 import java.net.URI;
22 import org.springframework.cloud.gateway.filter.GatewayFilter;
23 import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
24 import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory.NameConfig;
25 import org.springframework.http.server.reactive.ServerHttpRequest;
26 import org.springframework.web.util.UriComponentsBuilder;
27
28 public class QueryParamToRequestHeaderFilterFactory extends AbstractGatewayFilterFactory<NameConfig> {
29
30 public QueryParamToRequestHeaderFilterFactory() {
31 super(NameConfig.class);
32 }
33
34 @Override
35 public GatewayFilter apply(final NameConfig config) {
36 return (exchange, chain) -> {
37 ServerHttpRequest originalRequest = exchange.getRequest();
38
39 ServerHttpRequest mutatedRequest;
40 if (originalRequest.getQueryParams().isEmpty()) {
41 mutatedRequest = originalRequest;
42 } else {
43 URI newUri = UriComponentsBuilder.fromUri(originalRequest.getURI()).
44 replaceQueryParam(config.getName()).build().toUri();
45
46 mutatedRequest = exchange.getRequest().mutate().
47 uri(newUri).
48 headers(headers -> headers.addAll(
49 config.getName(), originalRequest.getQueryParams().get(config.getName()))).
50 build();
51 }
52
53 return chain.filter(exchange.mutate().request(mutatedRequest).build());
54 };
55 }
56 }