亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Spinrg WebFlux中Cookie的讀寫(xiě)的示例

 更新時(shí)間:2019年01月07日 11:11:58   作者:隨風(fēng)溜達(dá)的向日葵  
這篇文章主要介紹了Spinrg WebFlux中Cookie的讀寫(xiě)的示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

WebFLux與WebMvc的差異

WebFlux讀寫(xiě)Cookie不像WebMvc那么直接,最主要的原因是WebMvc是基于Servlet規(guī)范的,而WebFlux僅僅遵守的是HTTP協(xié)議。所以在使用的時(shí)候會(huì)發(fā)現(xiàn)HttpServletRequest、HttpServletResponse這些Servlet層級(jí)的接口根本就無(wú)法使用。

Cookie與Servlet并沒(méi)有太直接的關(guān)系,前者是屬于HTTP規(guī)范的而后者是一個(gè)J2EE的規(guī)范,在應(yīng)用層面僅有的聯(lián)系就是Servlet會(huì)讀寫(xiě)Cookie中的JSESSIONID來(lái)標(biāo)記與前端瀏覽器和服務(wù)端的關(guān)系。而HttpServletRequest、HttpServletResponse僅是Servlet為請(qǐng)求和響應(yīng)提供header、body管理的接口。

WebFlux的Cookie管理

WebFlux目前并沒(méi)有為寫(xiě)Cookie提供任何工具。這就需要開(kāi)發(fā)者按照HTTP的規(guī)范來(lái)寫(xiě)Cookie。 在HTTP協(xié)議交互的過(guò)程中,服務(wù)端可以通過(guò)在response中添加Set-Cookie頭來(lái)讓瀏覽器記錄Cookie,而瀏覽器則在request中使用Cookie頭來(lái)傳遞cookie。

寫(xiě)Cookie

寫(xiě)cookie使用ResponseEntity向response頭中添加Set-Cookie即可。CookieBuilder的代碼比較長(zhǎng),它是用于構(gòu)建一個(gè)cookie字符串,Set-Cookie頭除了設(shè)置key=value,還可以設(shè)置過(guò)期日期expires,域名domain,路徑path等。

@RestController
@RequestMapping("/cookie")
public class CookieReadAWriteController {
 @GetMapping("/write")
 public ResponseEntity<String> cookieWrite() {
 HttpHeaders headers = new HttpHeaders();
 String cookie = new CookieBuilder().setKey("cookie-text")
  .setValue(cookieText)
  .setMaxAge(840000)
  .setPath("/")
  .build();
 headers.add("Set-Cookie", cookie);
 return new ResponseEntity<String>("hi," + userName, headers, HttpStatus.OK);
 }
}


class CookieBuilder {
 private String key;
 private String value;
 private String expires;
 private String domain;
 private String path;

 public CookieBuilder setKey(String key) {
 this.key = key;
 return this;
 }

 public CookieBuilder setValue(String value) {
 this.value = value;
 return this;
 }

 public CookieBuilder setMaxAge(long ms) {
 //cookie的過(guò)期日期為GMT格式的時(shí)間。
 Date date = new Date(new Date().getTime() + ms);
 SimpleDateFormat sdf = new SimpleDateFormat("EEE d MMM yyyy HH:mm:ss 'GMT'", Locale.US);
 sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
 this.expires = sdf.format(date);
 return this;
 }

 public CookieBuilder setDomain(String domain) {
 this.domain = domain;
 return this;
 }

 public CookieBuilder setPath(String path) {
 this.path = path;
 return this;
 }

 public String build() {
 StringBuilder sb = new StringBuilder();
 sb.append(this.key);
 sb.append("=");
 sb.append(this.value);
 sb.append(";");
 if (null != this.expires) {
  sb.append("expires=");
  sb.append(this.expires);
  sb.append(";");
 }
 if (null != this.domain) {
  sb.append("domain=");
  sb.append(this.domain);
  sb.append(";");
 }
 if (null != this.path) {
  sb.append("path=");
  sb.append(this.path);
  sb.append(";");
 }
 return sb.toString();
 }
}

讀cookie

獲取cookie就比較直觀,可以直接使用@CookieValue這個(gè)Annotation來(lái)獲取:

@RestController
@RequestMapping("/cookie")
public class CookieReadAWriteController {
 @GetMapping("/read/annotation")
 /**
 * @param value
 * @return
 */
 public String cookieReadAnnotation(@CookieValue("cookie-text") String value) {
 return "當(dāng)前Cookie中的內(nèi)容" + value;
 }
}

也可以直接從Request的Header中獲?。?/p>

@RestController
@RequestMapping("/cookie")
public class CookieReadAWriteController {
 @GetMapping("/read/annotation")
 /**
 * @param value
 * @return
 */
 @GetMapping("/read/entity")
 public String cookieReadEntity(RequestEntity<String> entity) {
 HttpHeaders headers = entity.getHeaders();
 List<String> cookie = headers.get("Cookie");
 return "當(dāng)前Cookie中的內(nèi)容" + cookie;
 }
}

使用Annotatin是直接標(biāo)記Cookie的key來(lái)獲取value。而使用RequestEntity需要從頭中先獲取Cookie的內(nèi)容,然后再解析key和value,存在一個(gè)key對(duì)應(yīng)多個(gè)value的情況需要使用RequestEntity。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java 數(shù)據(jù)結(jié)構(gòu)與算法系列精講之二叉堆

    Java 數(shù)據(jù)結(jié)構(gòu)與算法系列精講之二叉堆

    二叉堆是一種特殊的堆,其實(shí)質(zhì)是完全二叉樹(shù)。二叉堆有兩種:最大堆和最小堆。最大堆是指父節(jié)點(diǎn)鍵值總是大于或等于任何一個(gè)子節(jié)點(diǎn)的鍵值。而最小堆恰恰相反,指的是父節(jié)點(diǎn)鍵值總是小于任何一個(gè)子節(jié)點(diǎn)的鍵值
    2022-02-02
  • 詳解Java函數(shù)式編程和lambda表達(dá)式

    詳解Java函數(shù)式編程和lambda表達(dá)式

    這篇文章主要介紹了Java函數(shù)式編程和lambda表達(dá)式,對(duì)lambda感興趣的同學(xué),一定要看一下
    2021-04-04
  • java?讀寫(xiě)鎖的使用及它的優(yōu)點(diǎn)

    java?讀寫(xiě)鎖的使用及它的優(yōu)點(diǎn)

    這篇文章主要介紹了java?讀寫(xiě)鎖的使用及它的優(yōu)點(diǎn),讀寫(xiě)鎖的特點(diǎn)就是是讀讀不互斥、讀寫(xiě)互斥、寫(xiě)寫(xiě)互斥,下面具體使用分享需要的小伙伴可以參考一下
    2022-05-05
  • Java開(kāi)發(fā)之內(nèi)部類(lèi)對(duì)象的創(chuàng)建及hook機(jī)制分析

    Java開(kāi)發(fā)之內(nèi)部類(lèi)對(duì)象的創(chuàng)建及hook機(jī)制分析

    這篇文章主要介紹了Java開(kāi)發(fā)之內(nèi)部類(lèi)對(duì)象的創(chuàng)建及hook機(jī)制,結(jié)合實(shí)例形式分析了java基于hook機(jī)制內(nèi)部類(lèi)對(duì)象的創(chuàng)建與使用,需要的朋友可以參考下
    2018-01-01
  • Eclipse代碼格式化設(shè)置簡(jiǎn)單介紹

    Eclipse代碼格式化設(shè)置簡(jiǎn)單介紹

    這篇文章主要介紹了Eclipse代碼格式化設(shè)置簡(jiǎn)單介紹,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-10-10
  • Java項(xiàng)目中添加外部jar包的兩種方式(收藏版)

    Java項(xiàng)目中添加外部jar包的兩種方式(收藏版)

    這篇文章主要介紹了java項(xiàng)目中添加外部jar包的兩種方式,第二種方式是將外部jar包引入到本地maven倉(cāng)庫(kù)中,本文給大家講解的非常詳細(xì),需要的朋友可以參考下
    2023-03-03
  • 深入解析Java接口(interface)的使用

    深入解析Java接口(interface)的使用

    這篇文章主要介紹了深入解析Java接口(interface)的使用,是Java入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-09-09
  • java使用PageInfo的list通用分頁(yè)處理demo

    java使用PageInfo的list通用分頁(yè)處理demo

    這篇文章主要為大家介紹了java使用PageInfo的list通用分頁(yè)處理demo,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2023-12-12
  • Java中Arrays.sort()方法的比較器詳解

    Java中Arrays.sort()方法的比較器詳解

    這篇文章主要介紹了Java中Arrays.sort()方法的比較器詳解,Arrays.sort(Object[] a)此方法看似沒(méi)有要求我們實(shí)現(xiàn)比較器,對(duì)于基本數(shù)據(jù)類(lèi)型,String類(lèi)型確實(shí)如此,因?yàn)檫@些類(lèi)型中已經(jīng)自帶了compareTo()方法,需要的朋友可以參考下
    2023-12-12
  • Java多線(xiàn)程下載網(wǎng)圖的完整案例

    Java多線(xiàn)程下載網(wǎng)圖的完整案例

    這篇文章主要給大家介紹了關(guān)于Java多線(xiàn)程下載網(wǎng)圖的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03

最新評(píng)論