您的位置:首页 > 娱乐 > 八卦 > 宁波网站建设制作方法_网络营销策略制定_seo优化或网站编辑_站牛网是做什么的

宁波网站建设制作方法_网络营销策略制定_seo优化或网站编辑_站牛网是做什么的

2025/7/25 11:30:19 来源:https://blog.csdn.net/Angushine/article/details/147161863  浏览:    关键词:宁波网站建设制作方法_网络营销策略制定_seo优化或网站编辑_站牛网是做什么的
宁波网站建设制作方法_网络营销策略制定_seo优化或网站编辑_站牛网是做什么的

使用Gateway的时候,如何统一修改相应内容

版本信息

<spring-cloud-alibaba.version>2021.0.6.0</spring-cloud-alibaba.version>
<spring-boot.version>2.6.13</spring-boot.version>
<spring-cloud.version>2021.0.5</spring-cloud.version>

定义全局过滤器

import lombok.extern.slf4j.Slf4j;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.nacos.shaded.com.google.gson.Gson;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.cloud.gateway.filter.NettyWriteResponseFilter;
import org.springframework.cloud.gateway.filter.factory.rewrite.MessageBodyDecoder;
import org.springframework.cloud.gateway.filter.factory.rewrite.MessageBodyEncoder;
import org.springframework.cloud.gateway.filter.factory.rewrite.ModifyResponseBodyGatewayFilterFactory;
import org.springframework.cloud.gateway.filter.factory.rewrite.RewriteFunction;
import org.springframework.core.Ordered;
import org.springframework.http.codec.HttpMessageReader;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;import java.util.List;
import java.util.Map;
import java.util.Set;@Slf4j
public class ModifyResponseBodyFilter implements GlobalFilter, Ordered {private final Gson gson = new Gson();private final Set<MessageBodyDecoder> messageBodyDecoders;private final Set<MessageBodyEncoder> messageBodyEncoders;private final List<HttpMessageReader<?>> messageReaders;public ModifyResponseBodyFilter(Set<MessageBodyDecoder> messageBodyDecoders, Set<MessageBodyEncoder> messageBodyEncoders, List<HttpMessageReader<?>> messageReaders) {this.messageBodyDecoders = messageBodyDecoders;this.messageBodyEncoders = messageBodyEncoders;this.messageReaders = messageReaders;}@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {ModifyResponseBodyGatewayFilterFactory.Config config = new ModifyResponseBodyGatewayFilterFactory.Config();config.setInClass(String.class);config.setOutClass(String.class);config.setRewriteFunction(new RewriteFunction() {@Overridepublic Object apply(Object o, Object o2) {ServerWebExchange serverWebExchange = (ServerWebExchange) o;log.debug(JSONObject.toJSONString(o2));log.debug(o2.getClass().toString());String oldBody = (String) o2;Map map = gson.fromJson(oldBody, Map.class);map.put("version", "1.0.22");return Mono.just(gson.toJson(map));}});return new ModifyResponseBodyGatewayFilterFactory(messageReaders, messageBodyDecoders, messageBodyEncoders).apply(config).filter(exchange, chain);}@Overridepublic int getOrder() {return NettyWriteResponseFilter.WRITE_RESPONSE_FILTER_ORDER - 1;}
}

注意以下这行内容为新增的内容
map.put(“version”, “1.0.22”);

配置生效

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.gateway.filter.factory.rewrite.MessageBodyDecoder;
import org.springframework.cloud.gateway.filter.factory.rewrite.MessageBodyEncoder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.codec.ServerCodecConfigurer;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.reactive.CorsWebFilter;
import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;
import org.szsti.qyjg.gateway.filter.ModifyResponseBodyFilter;import java.util.Arrays;
import java.util.Set;@Configuration
public class GatewayConfiguration {@Value("${spring.cross.allowedOrigin:}")private String allowedOriginUrl;@Beanpublic CorsWebFilter corsWebFilter() {CorsConfiguration corsConfiguration = new CorsConfiguration();corsConfiguration.addAllowedHeader("*");corsConfiguration.addAllowedMethod("*");// 跨域名单从配置文件中读取// 临时处理方案,这里采用的if (StringUtils.isNotEmpty(allowedOriginUrl)) {Arrays.stream(allowedOriginUrl.split(",")).forEach(it -> corsConfiguration.addAllowedOrigin(it));} else {corsConfiguration.addAllowedOrigin("*");}corsConfiguration.setAllowCredentials(true);UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();source.registerCorsConfiguration("/**", corsConfiguration);return new CorsWebFilter(source);}@Beanpublic ModifyResponseBodyFilter modifyResponseBodyFilter(ServerCodecConfigurer codecConfigurer, Set<MessageBodyDecoder> bodyDecoders,Set<MessageBodyEncoder> bodyEncoders) {return new ModifyResponseBodyFilter(bodyDecoders, bodyEncoders, codecConfigurer.getReaders());}
}

测试

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com