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

Java后端接口中提取請(qǐng)求頭中的Cookie和Token的方法

 更新時(shí)間:2025年01月20日 08:53:24   作者:碼農(nóng)阿豪@新空間代碼工作室  
在現(xiàn)代 Web 開(kāi)發(fā)中,HTTP 請(qǐng)求頭(Header)是客戶端與服務(wù)器之間傳遞信息的重要方式之一,本文將詳細(xì)介紹如何在 Java 后端(以 Spring Boot 為例)中提取請(qǐng)求頭中的 Cookie 和 Token,并提供完整的代碼示例和優(yōu)化建議,需要的朋友可以參考下

引言

在現(xiàn)代 Web 開(kāi)發(fā)中,HTTP 請(qǐng)求頭(Header)是客戶端與服務(wù)器之間傳遞信息的重要方式之一。常見(jiàn)的場(chǎng)景包括:

  • 通過(guò) Cookie 傳遞會(huì)話信息。
  • 通過(guò) Authorization 頭傳遞身份驗(yàn)證 Token。

本文將詳細(xì)介紹如何在 Java 后端(以 Spring Boot 為例)中提取請(qǐng)求頭中的 Cookie 和 Token,并提供完整的代碼示例和優(yōu)化建議。

1. 背景

1.1 什么是 HTTP 請(qǐng)求頭?

HTTP 請(qǐng)求頭是客戶端(如瀏覽器)發(fā)送給服務(wù)器的附加信息,用于傳遞元數(shù)據(jù)。常見(jiàn)的請(qǐng)求頭包括:

  • Cookie:用于傳遞客戶端存儲(chǔ)的會(huì)話信息。
  • Authorization:用于傳遞身份驗(yàn)證信息,如 JWT Token。

1.2 為什么需要提取請(qǐng)求頭?

在后端開(kāi)發(fā)中,提取請(qǐng)求頭中的信息是常見(jiàn)的需求。例如:

  • 身份驗(yàn)證:從 Authorization 頭中提取 Token,驗(yàn)證用戶身份。
  • 會(huì)話管理:從 Cookie 中提取會(huì)話 ID,維護(hù)用戶會(huì)話狀態(tài)。
  • 數(shù)據(jù)傳遞:通過(guò)自定義請(qǐng)求頭傳遞額外的業(yè)務(wù)數(shù)據(jù)。

2. 使用 Spring Boot 提取請(qǐng)求頭

Spring Boot 提供了多種方式來(lái)處理 HTTP 請(qǐng)求頭。以下是幾種常見(jiàn)的方法:

2.1 使用 @RequestHeader 注解

@RequestHeader 注解可以直接將請(qǐng)求頭中的值綁定到方法的參數(shù)上。

示例代碼

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HeaderController {

    @GetMapping("/example")
    public String getHeaders(
            @RequestHeader("Cookie") String cookie, // 提取 Cookie
            @RequestHeader("Authorization") String token // 提取 Token
    ) {
        return "Cookie: " + cookie + ", Token: " + token;
    }
}

說(shuō)明

  • @RequestHeader("Cookie"):提取請(qǐng)求頭中的 Cookie。
  • @RequestHeader("Authorization"):提取請(qǐng)求頭中的 Token(通常放在 Authorization 頭中)。

注意事項(xiàng)

  • 如果請(qǐng)求頭中沒(méi)有指定的字段,Spring 會(huì)拋出 MissingRequestHeaderException。可以通過(guò) required = false 設(shè)置為可選參數(shù):
@RequestHeader(value = "Cookie", required = false) String cookie

2.2 使用 HttpServletRequest

通過(guò) HttpServletRequest 對(duì)象,可以手動(dòng)獲取請(qǐng)求頭中的值。

示例代碼

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;

@RestController
public class HeaderController {

    @GetMapping("/example")
    public String getHeaders(HttpServletRequest request) {
        String cookie = request.getHeader("Cookie"); // 提取 Cookie
        String token = request.getHeader("Authorization"); // 提取 Token
        return "Cookie: " + cookie + ", Token: " + token;
    }
}

說(shuō)明

  • request.getHeader("Cookie"):獲取 Cookie 頭的值。
  • request.getHeader("Authorization"):獲取 Authorization 頭的值。

優(yōu)點(diǎn)

  • 更靈活,適用于需要?jiǎng)討B(tài)處理請(qǐng)求頭的場(chǎng)景。

2.3 使用 @CookieValue 注解

如果 Cookie 是以鍵值對(duì)的形式傳遞的(例如 Cookie: name=value),可以使用 @CookieValue 注解提取特定的 Cookie 值。

示例代碼

import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HeaderController {

    @GetMapping("/example")
    public String getCookie(
            @CookieValue("sessionId") String sessionId // 提取特定的 Cookie 值
    ) {
        return "Session ID: " + sessionId;
    }
}

說(shuō)明

  • @CookieValue("sessionId"):提取名為 sessionId 的 Cookie 值。

注意事項(xiàng)

  • 如果 Cookie 不存在,Spring 會(huì)拋出 MissingRequestCookieException。可以通過(guò) required = false 設(shè)置為可選參數(shù):
@CookieValue(value = "sessionId", required = false) String sessionId

3. 提取 Token 的常見(jiàn)方式

Token 通常放在 Authorization 頭中,格式為 Bearer <token>。我們需要提取 Bearer 后面的部分。

3.1 使用 @RequestHeader 和字符串處理

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HeaderController {

    @GetMapping("/example")
    public String getToken(
            @RequestHeader("Authorization") String authHeader // 提取 Authorization 頭
    ) {
        if (authHeader != null && authHeader.startsWith("Bearer ")) {
            String token = authHeader.substring(7); // 提取 Bearer 后面的部分
            return "Token: " + token;
        } else {
            return "Invalid Authorization header";
        }
    }
}

說(shuō)明

  • authHeader.startsWith("Bearer "):檢查 Authorization 頭是否以 Bearer 開(kāi)頭。
  • authHeader.substring(7):提取 Bearer 后面的 Token。

3.2 使用 HttpServletRequest 和字符串處理

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;

@RestController
public class HeaderController {

    @GetMapping("/example")
    public String getToken(HttpServletRequest request) {
        String authHeader = request.getHeader("Authorization"); // 提取 Authorization 頭
        if (authHeader != null && authHeader.startsWith("Bearer ")) {
            String token = authHeader.substring(7); // 提取 Bearer 后面的部分
            return "Token: " + token;
        } else {
            return "Invalid Authorization header";
        }
    }
}

4. 綜合示例

以下是一個(gè)綜合示例,提取 Cookie 和 Token,并返回處理結(jié)果:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;

@RestController
public class HeaderController {

    @GetMapping("/example")
    public String getHeaders(
            @RequestHeader(value = "Cookie", required = false) String cookie, // 提取 Cookie
            @RequestHeader(value = "Authorization", required = false) String authHeader // 提取 Authorization 頭
    ) {
        // 處理 Cookie
        String cookieInfo = (cookie != null) ? "Cookie: " + cookie : "No Cookie provided";

        // 處理 Token
        String tokenInfo;
        if (authHeader != null && authHeader.startsWith("Bearer ")) {
            String token = authHeader.substring(7); // 提取 Bearer 后面的部分
            tokenInfo = "Token: " + token;
        } else {
            tokenInfo = "Invalid or missing Authorization header";
        }

        return cookieInfo + ", " + tokenInfo;
    }
}

5. 測(cè)試接口

可以使用 Postman 或 curl 測(cè)試接口:

5.1 請(qǐng)求示例

curl -X GET http://localhost:8080/example \
-H "Cookie: sessionId=abc123" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."

5.2 響應(yīng)示例

{
  "Cookie": "sessionId=abc123",
  "Token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}

6. 總結(jié)

在 Java 后端(Spring Boot)中提取請(qǐng)求頭中的 Cookie 和 Token 有多種方式:

  1. 使用 @RequestHeader 注解:適合直接綁定請(qǐng)求頭到方法參數(shù)。
  2. 使用 HttpServletRequest:適合需要?jiǎng)討B(tài)處理請(qǐng)求頭的場(chǎng)景。
  3. 使用 @CookieValue 注解:適合提取特定的 Cookie 值。

對(duì)于 Token,通常需要從 Authorization 頭中提取 Bearer 后面的部分。通過(guò)合理的異常處理和參數(shù)校驗(yàn),可以確保代碼的健壯性和可維護(hù)性。

以上就是Java后端接口中提取請(qǐng)求頭中的Cookie和Token的方法的詳細(xì)內(nèi)容,更多關(guān)于Java后端接口提取Cookie和Token的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 如何實(shí)現(xiàn)java Iterator迭代器功能

    如何實(shí)現(xiàn)java Iterator迭代器功能

    這篇文章主要介紹了如何實(shí)現(xiàn)java Iterator迭代器功能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • 深入解讀MVC模式和三層架構(gòu)

    深入解讀MVC模式和三層架構(gòu)

    這篇文章主要介紹了深入解讀MVC模式和三層架構(gòu),三層架構(gòu)就是為了符合“高內(nèi)聚,低耦合”思想,把各個(gè)功能模塊劃分為表示層(UI)、業(yè)務(wù)邏輯層(BLL)和數(shù)據(jù)訪問(wèn)層(DAL)的三層架構(gòu),各層之間采用接口相互訪問(wèn),需要的朋友可以參考下
    2023-04-04
  • IDEA自定義setter和getter格式的設(shè)置方法

    IDEA自定義setter和getter格式的設(shè)置方法

    這篇文章主要介紹了IDEA自定義setter和getter格式的設(shè)置方法,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2023-12-12
  • 老生常談JVM的內(nèi)存溢出說(shuō)明及參數(shù)調(diào)整

    老生常談JVM的內(nèi)存溢出說(shuō)明及參數(shù)調(diào)整

    下面小編就為大家?guī)?lái)一篇老生常談JVM的內(nèi)存溢出說(shuō)明及參數(shù)調(diào)整。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-03-03
  • Java Swing編寫(xiě)一個(gè)簡(jiǎn)單的計(jì)算器軟件

    Java Swing編寫(xiě)一個(gè)簡(jiǎn)單的計(jì)算器軟件

    大家好,本篇文章主要講的是Java Swing編寫(xiě)一個(gè)簡(jiǎn)單的計(jì)算器軟件,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • Spring?boot?easyexcel?實(shí)現(xiàn)復(fù)合數(shù)據(jù)導(dǎo)出、按模塊導(dǎo)出功能

    Spring?boot?easyexcel?實(shí)現(xiàn)復(fù)合數(shù)據(jù)導(dǎo)出、按模塊導(dǎo)出功能

    這篇文章主要介紹了Spring?boot?easyexcel?實(shí)現(xiàn)復(fù)合數(shù)據(jù)導(dǎo)出、按模塊導(dǎo)出,實(shí)現(xiàn)思路流程是準(zhǔn)備一個(gè)導(dǎo)出基礎(chǔ)填充模板,默認(rèn)填充key,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-09-09
  • Java實(shí)現(xiàn)PDF轉(zhuǎn)為線性PDF詳解

    Java實(shí)現(xiàn)PDF轉(zhuǎn)為線性PDF詳解

    線性化PDF文件是PDF文件的一種特殊格式,可以通過(guò)Internet更快地進(jìn)行查看。本文將通過(guò)后端Java程序?qū)崿F(xiàn)將PDF文件轉(zhuǎn)為線性化PDF。感興趣的可以了解一下
    2021-12-12
  • JAVA實(shí)現(xiàn)基于Tcp協(xié)議的簡(jiǎn)單Socket通信實(shí)例

    JAVA實(shí)現(xiàn)基于Tcp協(xié)議的簡(jiǎn)單Socket通信實(shí)例

    本篇文章主要介紹了JAVA實(shí)現(xiàn)基于Tcp協(xié)議的簡(jiǎn)單Socket通信實(shí)例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-01-01
  • Java整合RabbitMQ實(shí)現(xiàn)五種常見(jiàn)消費(fèi)模型

    Java整合RabbitMQ實(shí)現(xiàn)五種常見(jiàn)消費(fèi)模型

    本文將深入介紹RabbitMQ的五種常見(jiàn)消費(fèi)模型,包括簡(jiǎn)單隊(duì)列模型、工作隊(duì)列模型、發(fā)布/訂閱模型、路由模型和主題模型,刪除線格式并探討它們各自的優(yōu)缺點(diǎn)和適用場(chǎng)景,感興趣的可以了解一下
    2023-11-11
  • Mybatis-plus與Mybatis依賴沖突問(wèn)題解決方法

    Mybatis-plus與Mybatis依賴沖突問(wèn)題解決方法

    ,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧這篇文章主要介紹了Mybatis-plus與Mybatis依賴沖突問(wèn)題解決方法
    2021-04-04

最新評(píng)論