mirror of
https://gitee.com/dromara/RuoYi-Vue-Plus.git
synced 2026-09-20 18:15:56 +08:00
添加隐藏参数优化
This commit is contained in:
parent
dd46fa932f
commit
71ee37556d
@ -1,6 +1,7 @@
|
|||||||
package com.ruoyi.gateway.filter;
|
package com.ruoyi.gateway.filter;
|
||||||
|
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import cn.hutool.json.JSONArray;
|
||||||
import cn.hutool.json.JSONObject;
|
import cn.hutool.json.JSONObject;
|
||||||
import cn.hutool.json.JSONUtil;
|
import cn.hutool.json.JSONUtil;
|
||||||
import com.ruoyi.gateway.utils.GatewayUtils;
|
import com.ruoyi.gateway.utils.GatewayUtils;
|
||||||
@ -57,17 +58,15 @@ public class CustomerGlobalFilter implements GlobalFilter, Ordered {
|
|||||||
final MultiValueMap<String, String> queryParams = new LinkedMultiValueMap<>(request.getQueryParams());
|
final MultiValueMap<String, String> queryParams = new LinkedMultiValueMap<>(request.getQueryParams());
|
||||||
handleRule(headerAk, () -> queryParams.get(accessKeyName), route, request, accessKeyName);
|
handleRule(headerAk, () -> queryParams.get(accessKeyName), route, request, accessKeyName);
|
||||||
queryParams.remove(accessKeyName);
|
queryParams.remove(accessKeyName);
|
||||||
handleHiddenParams(route, queryParams, (json, map) -> {
|
handleHiddenParams(route, queryParams, (next, map) -> {
|
||||||
Iterator<Map.Entry<String, Object>> iterator = json.entrySet().iterator();
|
|
||||||
while (iterator.hasNext()) {
|
|
||||||
Map.Entry<String, Object> next = iterator.next();
|
|
||||||
Object value;
|
Object value;
|
||||||
if (Objects.isNull(value = next.getValue()) || StrUtil.isBlank(value.toString())) {
|
if (Objects.isNull(value = next.getValue())) {
|
||||||
map.add(next.getKey(), StrUtil.EMPTY);
|
map.add(next.getKey(), StrUtil.EMPTY);
|
||||||
|
} else if(value instanceof JSONArray) {
|
||||||
|
map.put(next.getKey(), ((JSONArray)value).toList(String.class));
|
||||||
} else {
|
} else {
|
||||||
map.add(next.getKey(), value.toString());
|
map.add(next.getKey(), value.toString());
|
||||||
}
|
}
|
||||||
}
|
|
||||||
});
|
});
|
||||||
URI newUri = UriComponentsBuilder.fromUri(request.getURI())
|
URI newUri = UriComponentsBuilder.fromUri(request.getURI())
|
||||||
.replaceQueryParams(unmodifiableMultiValueMap(queryParams)).build().toUri();
|
.replaceQueryParams(unmodifiableMultiValueMap(queryParams)).build().toUri();
|
||||||
@ -80,15 +79,11 @@ public class CustomerGlobalFilter implements GlobalFilter, Ordered {
|
|||||||
MediaType mediaType = request.getHeaders().getContentType();
|
MediaType mediaType = request.getHeaders().getContentType();
|
||||||
if (MediaType.APPLICATION_JSON.equals(mediaType)) {
|
if (MediaType.APPLICATION_JSON.equals(mediaType)) {
|
||||||
JSONObject jsonObj = JSONUtil.parseObj(body);
|
JSONObject jsonObj = JSONUtil.parseObj(body);
|
||||||
String ak = handleRule(headerAk, () -> Arrays.asList(jsonObj.get(accessKeyName, String.class,
|
handleRule(headerAk, () -> Arrays.asList(jsonObj.get(accessKeyName, String.class, true)),
|
||||||
true)), route, request, accessKeyName);
|
route, request, accessKeyName);
|
||||||
jsonObj.remove(accessKeyName);
|
jsonObj.remove(accessKeyName);
|
||||||
handleHiddenParams(route, jsonObj, (json, map) -> {
|
handleHiddenParams(route, jsonObj, (next, map) -> {
|
||||||
Iterator<Map.Entry<String, Object>> iterator = json.entrySet().iterator();
|
|
||||||
while (iterator.hasNext()) {
|
|
||||||
Map.Entry<String, Object> next = iterator.next();
|
|
||||||
map.set(next.getKey(), next.getValue());
|
map.set(next.getKey(), next.getValue());
|
||||||
}
|
|
||||||
});
|
});
|
||||||
return Mono.just(jsonObj.toString());
|
return Mono.just(jsonObj.toString());
|
||||||
} else if (MediaType.APPLICATION_FORM_URLENCODED.equals(mediaType)) {
|
} else if (MediaType.APPLICATION_FORM_URLENCODED.equals(mediaType)) {
|
||||||
@ -98,12 +93,18 @@ public class CustomerGlobalFilter implements GlobalFilter, Ordered {
|
|||||||
accessKeyName.equals(param[0])).map(param -> param[1]).collect(Collectors.toList()),
|
accessKeyName.equals(param[0])).map(param -> param[1]).collect(Collectors.toList()),
|
||||||
route, request, accessKeyName);
|
route, request, accessKeyName);
|
||||||
final List<String[]> params = stream.filter(param -> !accessKeyName.equals(param[0])).collect(Collectors.toList());
|
final List<String[]> params = stream.filter(param -> !accessKeyName.equals(param[0])).collect(Collectors.toList());
|
||||||
handleHiddenParams(route, params, (json, list) -> {
|
handleHiddenParams(route, params, (next, list) -> {
|
||||||
Iterator<Map.Entry<String, Object>> iterator = json.entrySet().iterator();
|
Object value;
|
||||||
while (iterator.hasNext()) {
|
if (Objects.isNull(value = next.getValue())) {
|
||||||
Map.Entry<String, Object> next = iterator.next();
|
list.add(new String[]{next.getKey(), StrUtil.EMPTY});
|
||||||
|
} else if(value instanceof JSONArray) {
|
||||||
|
((JSONArray)value).stream().map(o -> String.valueOf(o)).forEach(v -> {
|
||||||
|
list.add(new String[]{next.getKey(), v});
|
||||||
|
});
|
||||||
|
} else {
|
||||||
list.add(new String[]{next.getKey(), next.getValue().toString()});
|
list.add(new String[]{next.getKey(), next.getValue().toString()});
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
return Mono.just(params.stream().map(param -> param[0] + '=' + param[1]).collect(Collectors.joining("&")));
|
return Mono.just(params.stream().map(param -> param[0] + '=' + param[1]).collect(Collectors.joining("&")));
|
||||||
}
|
}
|
||||||
@ -156,7 +157,7 @@ public class CustomerGlobalFilter implements GlobalFilter, Ordered {
|
|||||||
* @param mapper
|
* @param mapper
|
||||||
* @param <U>
|
* @param <U>
|
||||||
*/
|
*/
|
||||||
private <U> void handleHiddenParams(Route route, U result, BiConsumer<JSONObject, U> mapper) {
|
private <U> void handleHiddenParams(Route route, U result, BiConsumer<Map.Entry<String, Object>, U> mapper) {
|
||||||
final Object obj = route.getMetadata().get(GatewayUtils.CONFIG_ADD_PARAM_KEY);
|
final Object obj = route.getMetadata().get(GatewayUtils.CONFIG_ADD_PARAM_KEY);
|
||||||
if (Objects.isNull(obj)) {
|
if (Objects.isNull(obj)) {
|
||||||
return;
|
return;
|
||||||
@ -165,6 +166,10 @@ public class CustomerGlobalFilter implements GlobalFilter, Ordered {
|
|||||||
if (json.isEmpty()) {
|
if (json.isEmpty()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
mapper.accept(json, result);
|
Iterator<Map.Entry<String, Object>> iterator = json.entrySet().iterator();
|
||||||
|
while (iterator.hasNext()) {
|
||||||
|
Map.Entry<String, Object> next = iterator.next();
|
||||||
|
mapper.accept(next, result);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user