zoukankan      html  css  js  c++  java
  • 【SpringBoot WebFlux 系列】 header 参数解析

    【SpringBoot WebFlux 系列】WebFlux 之 header 参数解析

    上一篇 weblfux 主要介绍了 path 参数的解析与映射关系,在我们进入 url 参数/post 表单之前,先看一下另外的一种参数--请求头中的参数如何处理

    I. 项目环境

    本项目借助SpringBoot 2.2.1.RELEASE + maven 3.5.3 + IDEA进行开发

    1. 依赖

    使用 WebFlux,最主要的引入依赖如下(省略掉了 SpringBoot 的相关依赖,如对于如何创建 SpringBoot 项目不太清楚的小伙伴,可以关注一下我之前的博文)

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
        </dependency>
    </dependencies>
    

    II. 请求头参数解析

    在实际的业务开发中,有几个请求头出现的频率特别高,如常用于反爬的User-Agent,鉴定强求来源的referer,跨域相关的Access-Control-Allow-,cookie、session 自定义的请求头等

    1. 请求头限制

    RequestMappingGetMapping中指定请求头参数时,表示只有请求中包含这个请求头才会匹配过去

    /**
     * 只有请求头包含 myheader 且值为 myvalue的才可以访问到
     *
     * - 正常访问: curl 'http://127.0.0.1:8080/header/filter/yihhui' -H 'myheader: myvalue'
     * - 异常访问: curl 'http://127.0.0.1:8080/header/filter/yihhui' -H 'myheader: myvalue2'  因为请求头不匹配,404
     *
     * @param name
     * @return
     */
    @GetMapping(path = "/filter/{name}", headers = "myheader=myvalue")
    public Mono<String> headerFilter(@PathVariable(name = "name") String name) {
        return Mono.just("request filter: " + name);
    }
    

    实例如下:

    ➜  ~ curl 'http://127.0.0.1:8080/header/filter/yihhui' -H 'myheader: myvalue'
    request filter: yihhui%
    
    ➜  ~ curl 'http://127.0.0.1:8080/header/filter/yihhui' -H 'myheader: myvalue2'
    {"timestamp":"2020-09-07T00:40:34.493+0000","path":"/header/filter/yihhui","status":404,"error":"Not Found","message":null,"requestId":"aa47f5a5"}%
    

    2. 请求头参数解析

    WebFlux 依然是可以通过注解@RequestHeader来获取对应的请求头

    从使用姿势上来看,webflux 与 webmvc 并没有什么区别

    /**
     * 获取请求头
     *
     * curl 'http://127.0.0.1:8080/header/get' -H 'myheader: myvalue' -H 'user-agent: xxxxxxx'
     *
     * @param header  注意,这个是自定义的请求头
     * @param userAgent
     * @return
     */
    @GetMapping(path = "get")
    public Mono<String> getHeader(@RequestHeader("myheader") String header,
            @RequestHeader("user-agent") String userAgent) {
        return Mono.just("request headers: myheader=" + header + " userAgent=" + userAgent);
    }
    

    测试 case 如下

    ➜  ~ curl 'http://127.0.0.1:8080/header/get' -H 'myheader: myvalue' -H 'user-agent: xxxxxxx'
    request headers: myheader=myvalue userAgent=xxxxxxx%
    

    利用 cookie 来标识用户身份可以说是非常普遍的场景了,我们通过专用的CookieValue来获取指定的 cookies 值

    /**
     * 获取cookie
     *
     * curl 'http://127.0.0.1:8080/header/cookie' --cookie 'tid=12343123;tt=abc123def'
     *
     * @param tid
     * @return
     */
    @GetMapping(path = "cookie")
    public Mono<String> getCookie(@CookieValue("tid") String tid) {
        return Mono.just("request cookies tid=" + tid);
    }
    

    上面的 case 中,标识只需要获取 tid 这个 cookies 值,其他的不 care

    ➜  ~ curl 'http://127.0.0.1:8080/header/cookie' --cookie 'tid=12343123;tt=abc123def'
    request cookies tid=12343123%
    

    II. 其他

    0. 项目

    系列博文

    1. 一灰灰 Blog

    尽信书则不如,以上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现 bug 或者有更好的建议,欢迎批评指正,不吝感激

    下面一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛

    一灰灰blog

  • 相关阅读:
    83. Remove Duplicates from Sorted List
    35. Search Insert Position
    96. Unique Binary Search Trees
    94. Binary Tree Inorder Traversal
    117. Populating Next Right Pointers in Each Node II
    116. Populating Next Right Pointers in Each Node
    111. Minimum Depth of Binary Tree
    169. Majority Element
    171. Excel Sheet Column Number
    190. Reverse Bits
  • 原文地址:https://www.cnblogs.com/yihuihui/p/13649655.html
Copyright © 2011-2022 走看看