欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spinrg WebFlux中Cookie的讀寫的示例

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

WebFLux與WebMvc的差異

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

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

WebFlux的Cookie管理

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

寫Cookie

寫cookie使用ResponseEntity向response頭中添加Set-Cookie即可。CookieBuilder的代碼比較長,它是用于構(gòu)建一個cookie字符串,Set-Cookie頭除了設(shè)置key=value,還可以設(shè)置過期日期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的過期日期為GMT格式的時間。
 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這個Annotation來獲?。?/p>

@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來獲取value。而使用RequestEntity需要從頭中先獲取Cookie的內(nèi)容,然后再解析key和value,存在一個key對應(yīng)多個value的情況需要使用RequestEntity。

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

相關(guān)文章

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

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

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

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

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

    java?讀寫鎖的使用及它的優(yōu)點

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

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

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

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

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

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

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

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

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

    java使用PageInfo的list通用分頁處理demo

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

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

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

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

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

最新評論