第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

聊聊spring cloud gateway的RedirectToGatewayFilter

標(biāo)簽:
SpringBoot

作者:codecraft

原文链接:https://segmentfault.com/a/1190000015282327

本文主要研究下spring cloud gateway的RedirectToGatewayFilter

GatewayAutoConfiguration

spring-cloud-gateway-core-2.0.0.RC2-sources.jar!/org/springframework/cloud/gateway/config/GatewayAutoConfiguration.java

@Configuration@ConditionalOnProperty(name = "spring.cloud.gateway.enabled", matchIfMissing = true)@EnableConfigurationProperties@AutoConfigureBefore(HttpHandlerAutoConfiguration.class)@AutoConfigureAfter({GatewayLoadBalancerClientAutoConfiguration.class, GatewayClassPathWarningAutoConfiguration.class})@ConditionalOnClass(DispatcherHandler.class)
public class GatewayAutoConfiguration {    //......
    @Bean
    public RedirectToGatewayFilterFactory redirectToGatewayFilterFactory() {        return new RedirectToGatewayFilterFactory();
    }    //......}

RedirectToGatewayFilterFactory

spring-cloud-gateway-core-2.0.0.RC2-sources.jar!/org/springframework/cloud/gateway/filter/factory/RedirectToGatewayFilterFactory.java

public class RedirectToGatewayFilterFactory extends AbstractGatewayFilterFactory<RedirectToGatewayFilterFactory.Config> {    public static final String STATUS_KEY = "status";    public static final String URL_KEY = "url";    public RedirectToGatewayFilterFactory() {        super(Config.class);
    }    @Override
    public List<String> shortcutFieldOrder() {        return Arrays.asList(STATUS_KEY, URL_KEY);
    }    @Override
    public GatewayFilter apply(Config config) {        return apply(config.status, config.url);
    }    public GatewayFilter apply(String statusString, String urlString) {        final HttpStatus httpStatus = parse(statusString);
        Assert.isTrue(httpStatus.is3xxRedirection(), "status must be a 3xx code, but was " + statusString);        final URL url;        try {
            url = URI.create(urlString).toURL();
        } catch (MalformedURLException e) {            throw new IllegalArgumentException("Invalid url " + urlString, e);
        }        return apply(httpStatus, url);
    }    public GatewayFilter apply(HttpStatus httpStatus, URL url) {        return (exchange, chain) ->
            chain.filter(exchange).then(Mono.defer(() -> {                if (!exchange.getResponse().isCommitted()) {
                    setResponseStatus(exchange, httpStatus);                    final ServerHttpResponse response = exchange.getResponse();
                    response.getHeaders().set(HttpHeaders.LOCATION, url.toString());                    return response.setComplete();
                }                return Mono.empty();
            }));
    }    public static class Config {
        String status;
        String url;        public String getStatus() {            return status;
        }        public void setStatus(String status) {            this.status = status;
        }        public String getUrl() {            return url;
        }        public void setUrl(String url) {            this.url = url;
        }
    }

}
  • 可以看到配置文件有两个参数,一个是status,一个是url

  • 这里对status进行了校验,必须是3xx

  • 然后设置response status code,同时在header的location写入要跳转的url

实例

spring:  cloud:    gateway:      routes:      - id: prefixpath_route        uri: http://example.org        filters:        - RedirectTo=302, http://acme.org

小结

spring cloud gateway提供了RedirectToGatewayFilter,可以直接在配置文件对指定的路由进行3xx跳转。

doc


點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消