您的位置:首页 > 娱乐 > 明星 > 广州工商注册查询网_专业_google网页版入口_网站的seo

广州工商注册查询网_专业_google网页版入口_网站的seo

2024/10/10 14:03:53 来源:https://blog.csdn.net/qq_41712271/article/details/142816757  浏览:    关键词:广州工商注册查询网_专业_google网页版入口_网站的seo
广州工商注册查询网_专业_google网页版入口_网站的seo

需求:
网关层在header中添加参数,header-user_id=1001,header-user_name=小明
各个子微服务,可以通过openfeign,线程池等方式拿到上面的参数

1 网关层 gateway添加需要传递的参数信息

import cn.hutool.core.net.URLEncodeUtil;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;/*** 认证过滤器组件* 该组件用于检查请求中的认证令牌,以确保只有合法的请求才能继续传递到下游服务*/
@Component
public class AuthFilter implements GlobalFilter, Ordered {/*** 过滤器的主要逻辑* 检查请求中的令牌,如果不是预期的令牌,则返回未授权的状态* 如果令牌有效,则在请求头中添加公共请求参数,并将请求传递给下游服务** @param exchange 当前的服务器Web交换对象,包含请求和响应信息* @param chain    网关过滤器链,用于将请求传递给下一个过滤器或最终的目标服务* @return Mono<Void> 表示异步处理的空结果*/@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {ServerHttpRequest request = exchange.getRequest();String token = getToken(request);// 根据自己的逻辑来判断处理if (!"xxx".equals(token)) {ServerHttpResponse response = exchange.getResponse();response.setStatusCode(HttpStatus.UNAUTHORIZED);response.getHeaders().add(HttpHeaders.CONTENT_TYPE, MediaType.TEXT_PLAIN_VALUE);DataBuffer dataBuffer = response.bufferFactory().wrap("Invalid token".getBytes());return response.writeWith(Mono.just(dataBuffer));}// 放入公共请求参数到请求头中,向下层服务中传递ServerHttpRequest.Builder mutate = request.mutate();mutate.header("header-user_id", "1001");mutate.header("header-user_name", URLEncodeUtil.encode("小明"));return chain.filter(exchange.mutate().request(mutate.build()).build());}/*** 获取请求中的令牌* 当前实现简单地从请求头中获取名为"token"的值** @param request 当前的HTTP请求对象* @return String 表示请求中的令牌*/private String getToken(ServerHttpRequest request) {return request.getHeaders().getFirst("token");}/*** 获取过滤器的顺序* 返回Ordered.LOWEST_PRECEDENCE表示该过滤器具有最低的优先级** @return int 表示过滤器的顺序值*/@Overridepublic int getOrder() {return Ordered.LOWEST_PRECEDENCE;}
}

2 新建一个中间处理层微服务,处理openfeign,普通请求,线程池中拿到header参数传递的逻辑


3 在各个子微服务中拿参数,@FeignClient要加上configuration 属性

@FeignClient(name = "chao-chi-service", path = "/chi_controller",configuration = SystemContextRequestInterceptor.class)
@GetMapping("/getheadparam")
public String test1() {Map<String, String> contextMap = SystemContextHolder.getSystemContext().getContextMap();log.info("contextMap:{}", JSONUtil.toJsonPrettyStr(contextMap));this.threadPoolExecutor.execute(() -> {log.info("通过线程池 execute 执行任务,{}", SystemContextHolder.getSystemContext().getContextMap());});//5、使用线程池执行任务,调用的是 submit 方法this.threadPoolExecutor.submit(() -> {log.info("通过线程池 submit 执行任务,{}", SystemContextHolder.getSystemContext().getContextMap());});return "我是child-service-getHeadParam--------------"+JSONUtil.toJsonStr(contextMap);}

代码链接

通过网盘分享的文件:微服务网关层发送参数-各子微服务通过openfeign-线程池等方式拿到参数.rar
链接: https://pan.baidu.com/s/1_NrJ-wz7-zmGlIskdPApwA?pwd=88cx 提取码: 88cx

 

版权声明:

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

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