这篇文章主要讲解了“SpringCloud Gateway里怎么给请求添加header信息”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringCloud Gateway里怎么给请求添加header信息”吧!
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 Mono<Void> filter(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信息这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。