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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

網(wǎng)站流量的Cookie管理 網(wǎng)絡(luò)客戶端

網(wǎng)站流量的Cookie管理 網(wǎng)絡(luò)客戶端

躍然一笑 2022-09-22 19:41:16
我有一個(gè) Web 客戶端,它將一個(gè)帶有登錄憑據(jù)的 JSON 對(duì)象發(fā)送到遠(yuǎn)程服務(wù)器。然后,遠(yuǎn)程服務(wù)器返回該 Cookie。之后,我需要將數(shù)據(jù)與cookie一起發(fā)布到該遠(yuǎn)程服務(wù)器。但是,我無法弄清楚如何在POST中重復(fù)使用cookie。據(jù)我所知,登錄響應(yīng)給出了以下結(jié)構(gòu),但是在POST上設(shè)置cookie的代碼需要或只是。MultiValueMap<String, ResponseCookie>MultiValueMap<String, String>cookie(String, String)我假設(shè)我一定錯(cuò)過了一些轉(zhuǎn)換器的魔力,但那又如何呢?我甚至需要退回整個(gè)餅干嗎?餅干看起來像這樣;{SSO_Sticky_Session-47873-loadBalancedAdminGrp=[SSO_Sticky_Session-47873-loadBalancedAdminGrp=BNAMAKAKJABP; Path=/; HttpOnly], AUTH_TOKEN=[AUTH_TOKEN=v0l3baVZejIKjdzA1KGpkz4ccnosE6rKLQig1D2bdb-voFmVrF_aaYgzWl3Yc8QK; Path=/], uid=[uid=sjzipQdBtU30OlVbPWtDK2625i24i6t6g3Rjl5y5XcI=; Path=/], __cfduid=[__cfduid=dd872f39fd1d3bfe2a5c7316cd9ff63cd1554623603; Path=/; Domain=.aDomain.net; Max-Age=31535999; Expires=Mon, 6 Apr 2020 07:53:23 GMT; HttpOnly], JSESSIONID=[JSESSIONID=A264A713AD060EE12DA8215AEF66A3C0; Path=/aPath/; HttpOnly]}我的代碼在下面。為了簡(jiǎn)潔起見,我刪除了內(nèi)容類型;WebClient webClient = WebClient.create("https://remoteServer");MultiValueMap<String, ResponseCookie> myCookies;webClient  .post()  .uri("uri/login")  .body(Mono.just(myLoginObject), MyLogin.class)  .exchange()  .subscribe(r ->     System.err.println("Received:" + r.cookies());    myCookies = r.cookies();   );webClient  .post()  .uri("/uri/data")  .cookies(????) // what goes here ??  .body(....)  .exchange();
查看完整描述

3 回答

?
當(dāng)年話下

TA貢獻(xiàn)1890條經(jīng)驗(yàn) 獲得超9個(gè)贊

在編寫服務(wù)器端Java和JSP多年之后,我在很大程度上忽略了cookie的概念,因?yàn)楣芾硎怯桑ɡ纾┓?wù)器端的Tomcat和客戶端的瀏覽器負(fù)責(zé)的。在Spring中,任何對(duì)cookie處理的搜索總是集中在Spring服務(wù)器上,很少關(guān)注Spring實(shí)際上是另一個(gè)服務(wù)器的客戶端。WebClient 的任何示例都是過于簡(jiǎn)單化的,并且沒有采用任何形式的安全協(xié)商。

在閱讀了餅干解釋維基百科餅干和餅干標(biāo)準(zhǔn)RFC6265之后,對(duì)我來說,為什么傳入的餅干在課堂上,而傳出的餅干是.傳入的 Cookie 在 (例如) 和 上具有其他元數(shù)據(jù)。ResponseCookieStringDomainPathMax-Age

對(duì)于我的實(shí)現(xiàn),供應(yīng)商沒有指定需要返回哪些 cookie,因此我最終返回了所有這些 Cookie。因此,我修改后的代碼如下;

WebClient webClient = WebClient.create("https://remoteServer");

MultiValueMap<String, String> myCookies = new LinkedMultiValueMap<String, String>()


webClient

  .post()

  .uri("uri/login")

  .body(Mono.just(myLoginObject), MyLogin.class)

  .exchange()

  .subscribe(r -> 

      for (String key: r.cookies().keySet()) {

        myCookies.put(key, Arrays.asList(r.cookies().get(key).get(0).getValue()));

      }

   );


webClient

  .post()

  .uri("/uri/data")

  .cookies(cookies -> cookies.addAll(myCookies))

  .body(....)

  .exchange();


查看完整回答
反對(duì) 回復(fù) 2022-09-22
?
動(dòng)漫人物

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超10個(gè)贊

由于已被棄用,但此線程出現(xiàn)在流行的搜索計(jì)算機(jī)上,因此讓我使用下面的代碼示例添加一個(gè)代碼示例以供將來參考。.exchange().exchangeToMono()


請(qǐng)注意,我使用一個(gè),它將在bean發(fā)送的每個(gè)請(qǐng)求之前發(fā)送授權(quán)請(qǐng)求:ExchangeFilterFunctionwebClient


@Bean("webClient")

public WebClient webClient(ReactorResourceFactory resourceFactory,

    ExchangeFilterFunction authFilter) {

    var httpClient = HttpClient.create(resourceFactory.getConnectionProvider());

    var clientHttpConnector = new ReactorClientHttpConnector(httpClient);

    return WebClient.builder().filter(authFilter).clientConnector(clientHttpConnector)

        .build();

}


@Bean("authWebClient")

public WebClient authWebClient(ReactorResourceFactory resourceFactory) {

    var httpClient = HttpClient.create(resourceFactory.getConnectionProvider());

    var clientHttpConnector = new ReactorClientHttpConnector(httpClient);

    return WebClient.builder().clientConnector(clientHttpConnector).build();

}


@Bean

public ExchangeFilterFunction authFilter(@Qualifier("authWebClient") WebClient authWebClient,

    @Value("${application.url:''}") String url,

    @Value("${application.basic-auth-credentials:''}") String basicAuthCredentials) {

return (request, next) -> authWebClient.get()

    .uri(url)

    .header("Authorization", String.format("Basic %s", basicAuthCredentials))

    .exchangeToMono(response -> next.exchange(ClientRequest.from(request)

        .headers(headers -> {

            headers.add("Authorization", String.format("Basic %s", basicAuthCredentials));

        })

        .cookies(readCookies(response))

        .build()));

}


private Consumer<MultiValueMap<String, String>> readCookies(ClientResponse response) {

return cookies -> response.cookies().forEach((responseCookieName, responseCookies) ->

    cookies.addAll(responseCookieName,

        responseCookies.stream().map(responseCookie -> responseCookie.getValue())

            .collect(Collectors.toList())));

}


查看完整回答
反對(duì) 回復(fù) 2022-09-22
?
幕布斯7119047

TA貢獻(xiàn)1794條經(jīng)驗(yàn) 獲得超8個(gè)贊

這個(gè)答案的靈感來自@J。


.exchange不應(yīng)再使用。取而代之的是一個(gè)名為 的新方法。在 Lambda 的幫助下,可以編輯和轉(zhuǎn)換響應(yīng)。餅干也可以被提取。在此示例中,Cookie 顯示在控制臺(tái)中。但它們也可以毫無問題地保存。.exchangeToMono


    public String getWebsiteWithCookies() {

        var webClient = WebClient.create();


        return webClient.post()

                .uri("url")

                // Your headers & so here

                .exchangeToMono(response -> {

                    MultiValueMap<String, ResponseCookie> cookies = response.cookies();

                    for (var cookie : cookies.entrySet()) {

                        System.out.println(cookie.getKey() + " : " + cookie.getValue());

                    }


                    return response.bodyToMono(String.class);

                })

                .block();

    }


查看完整回答
反對(duì) 回復(fù) 2022-09-22
  • 3 回答
  • 0 關(guān)注
  • 117 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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