最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spinrg WebFlux中Cookie的讀寫的示例

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

WebFLux與WebMvc的差異

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

Cookie與Servlet并沒有太直接的關(guān)系,前者是屬于HTTP規(guī)范的而后者是一個(gè)J2EE的規(guī)范,在應(yīng)用層面僅有的聯(lián)系就是Servlet會(huì)讀寫Cookie中的JSESSIONID來標(biāo)記與前端瀏覽器和服務(wù)端的關(guān)系。而HttpServletRequest、HttpServletResponse僅是Servlet為請(qǐng)求和響應(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的代碼比較長(zhǎng),它是用于構(gòu)建一個(gè)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格式的時(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來獲?。?/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,存在一個(gè)key對(duì)應(yīng)多個(gè)value的情況需要使用RequestEntity。

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

相關(guān)文章

  • 總結(jié)Java常用排序算法

    總結(jié)Java常用排序算法

    在本文里我們給大家整理了關(guān)于Java常用排序算法以及實(shí)例代碼分析,需要的朋友們跟著學(xué)習(xí)下。
    2019-03-03
  • springboot中如何通過cors協(xié)議解決跨域問題

    springboot中如何通過cors協(xié)議解決跨域問題

    這篇文章主要介紹了springboot中通過cors協(xié)議解決跨域問題,cors是一個(gè)w3c標(biāo)準(zhǔn),它允許瀏覽器(目前ie8以下還不能被支持)像我們不同源的服務(wù)器發(fā)出xmlHttpRequest請(qǐng)求,我們可以繼續(xù)使用ajax進(jìn)行請(qǐng)求訪問。具體內(nèi)容詳情大家跟隨腳本之家小編一起學(xué)習(xí)吧
    2018-05-05
  • Java使用JavaMail API發(fā)送和接收郵件的代碼示例

    Java使用JavaMail API發(fā)送和接收郵件的代碼示例

    JavaMail是Oracle甲骨文開發(fā)的Java郵件類API,支持多種郵件協(xié)議,這里我們就來看一下Java使用JavaMail API發(fā)送和接收郵件的代碼示例
    2016-06-06
  • 如何在Spring Boot應(yīng)用中優(yōu)雅的使用Date和LocalDateTime的教程詳解

    如何在Spring Boot應(yīng)用中優(yōu)雅的使用Date和LocalDateTime的教程詳解

    這篇文章主要介紹了如何在Spring Boot應(yīng)用中優(yōu)雅的使用Date和LocalDateTime,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • 通過Java實(shí)現(xiàn)設(shè)置Word文檔頁(yè)邊距的方法詳解

    通過Java實(shí)現(xiàn)設(shè)置Word文檔頁(yè)邊距的方法詳解

    頁(yè)邊距是指頁(yè)面的邊線到文字的距離。通??稍陧?yè)邊距內(nèi)部的可打印區(qū)域中插入文字和圖形等。今天這篇文章將為您展示如何通過編程方式,設(shè)置Word?文檔頁(yè)邊距,感興趣的可以了解一下
    2023-02-02
  • 23種設(shè)計(jì)模式(3) java原型模式

    23種設(shè)計(jì)模式(3) java原型模式

    這篇文章主要為大家詳細(xì)介紹了23種設(shè)計(jì)模式之java原型模式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • MyBatis如何通過攔截修改SQL

    MyBatis如何通過攔截修改SQL

    這篇文章主要介紹了MyBatis如何通過攔截修改SQL問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • java中List對(duì)象排序通用方法

    java中List對(duì)象排序通用方法

    這篇文章主要介紹了java中List對(duì)象排序通用方法,涉及java針對(duì)List對(duì)象的操作技巧,需要的朋友可以參考下
    2015-05-05
  • Java構(gòu)建JDBC應(yīng)用程序的實(shí)例操作

    Java構(gòu)建JDBC應(yīng)用程序的實(shí)例操作

    在本篇文章里小編給大家整理了一篇關(guān)于Java構(gòu)建JDBC應(yīng)用程序的實(shí)例操作,有興趣的朋友們可以學(xué)習(xí)參考下。
    2021-03-03
  • 用java實(shí)現(xiàn)斗地主發(fā)牌過程

    用java實(shí)現(xiàn)斗地主發(fā)牌過程

    這篇文章主要為大家詳細(xì)介紹了用java實(shí)現(xiàn)斗地主發(fā)牌過程,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11

最新評(píng)論

清河县| 正宁县| 红桥区| 元朗区| 玉屏| 康定县| 阳江市| 洞头县| 朔州市| 九龙城区| 荆门市| 新竹县| 交城县| 卫辉市| 建宁县| 文山县| 龙南县| 本溪| 昂仁县| 肥城市| 大宁县| 石阡县| 三穗县| 漾濞| 航空| 翁源县| 隆德县| 元谋县| 迁安市| 左权县| 太湖县| 平舆县| 永丰县| 宿州市| 越西县| 铜川市| 大关县| 米林县| 会东县| 普宁市| 中西区|