这篇文章主要讲解了“SpringCloud Gateway里怎么给请求添加header信息”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringCloud Gateway里怎么给请求添加header信息”吧!
成都创新互联主要从事网站设计制作、成都网站制作、网页设计、企业做网站、公司建网站等业务。立足成都服务镇巴,10多年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:13518219792
import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import org.springframework.cloud.gateway.filter.GatewayFilterChain; import org.springframework.cloud.gateway.filter.GlobalFilter; import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.security.core.context.ReactiveSecurityContextHolder; import org.springframework.security.core.context.SecurityContext; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; import org.springframework.web.server.ServerWebExchange; import reactor.core.publisher.Mono; @Component public class WebFluxUserRequestInfoFilter implements GlobalFilter { private static final String ORG_CODE = "11000001"; private static final String CHANNEL_CODE = "WEBQHZX001"; private static final String HEADER_USER_INFO_ENCODE = "X-User-Info-Encode"; @Override public Monofilter(ServerWebExchange exchange, GatewayFilterChain chain) { return ReactiveSecurityContextHolder.getContext().map(SecurityContext::getAuthentication).map(authentication -> { UserRequestInfo userInfo = new UserRequestInfo(); Object details = authentication.getDetails(); if(details instanceof JWTPlayload){ JWTPlayload jwtPlayload = (JWTPlayload) details; String userId = jwtPlayload.getSub(); userInfo.setUserId(userId); userInfo.setUserName(jwtPlayload.getCname()); } return userInfo; }).defaultIfEmpty(new UserRequestInfo()).flatMap(userInfo -> { UserRequestInfoHolder.setInstance(userInfo); String userInfoJson; try { String userInfoEncode = exchange.getRequest().getHeaders().getFirst(HEADER_USER_INFO_ENCODE); if(!StringUtils.isEmpty(userInfoEncode) && "false".equalsIgnoreCase(userInfoEncode)){ userInfoJson = JsonUtils.object2Json(userInfo); }else{ userInfoJson = URLEncoder.encode(JsonUtils.object2Json(userInfo), GlobalConstant.CHARSET); } } catch (UnsupportedEncodingException e) { throw new RuntimeException("URLEncoder.encode UserRequestInfo 失败"); } ServerHttpRequest newRequest = exchange.getRequest().mutate() .header(HeaderDefinition.USER_INFO, userInfoJson) .build(); return chain.filter(exchange.mutate().request(newRequest).build()); }); } }
感谢各位的阅读,以上就是“SpringCloud Gateway里怎么给请求添加header信息”的内容了,经过本文的学习后,相信大家对SpringCloud Gateway里怎么给请求添加header信息这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联,小编将为大家推送更多相关知识点的文章,欢迎关注!