原創:響應頭(response)和和請求頭(request)的值的添加和值的傳遞實現,為學習token打基礎


文章目錄:

  1. 什么是token?通過瀏覽器查看Header頭中的鍵值對,token值可通過header傳遞
  2. Controller控制器中代碼.----寫入響應鍵值對,而不是請求鍵值對
  3. 通過ajax,向請求頭中寫入鍵值對---------是請求鍵值對,而不是響應鍵值對
  4. Controller控制器,再接收前端傳遞過來自定義鍵值對.
    提醒:前端接收響應token存儲本地 localStorage中,不刪除一般不會消失

什么是token?

簡言之,客戶端與服務器端傳遞數據。其實和cookie傳遞數據原理相同,存方位置不同而已。存放在請求頭Response Header或Request Header。

 

 

1:控制器中代碼

    通過request.getHeader("RequestToken"); 來獲取請求頭中的鍵值對。RequestToken這自定義的鍵值對名稱。為后期傳token學習打基礎

  問:RequestToken: RequestTokenValue; 如何寫入到請求頭中的呢?
是通過前端請求時寫入的,見如下本例中第二部份代碼。

package com.ibaiqi.house.controller;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.*;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.session.Session;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.Factory;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import javax.jws.WebParam;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.UUID;

@Controller
@RequestMapping(value = "/user")
public class UserController {
    private static final transient Logger log = LoggerFactory.getLogger(UserController.class);

    
    /**
     * 通過response.addHeader(),向http請求頭中寫入token,經過前端代碼處理后儲存到本地localStorage,獲取本地localStorage值並添加到請求鍵值對,接收並打印、
     * @param mv
     * @return
     */
    @RequestMapping(value = "/getToken")
    public ModelAndView getToken(HttpServletResponse response, HttpServletRequest request, ModelAndView mv){
        log.info("測試得到token");
        //寫入token到請求頭
        //前端通過ajax接收,並存儲到localStorage本地,再添加到請求頭的鍵值對中,傳遞給后台打印
        response.addHeader("ResponseToken","responseToken value for token latter22");
       
        //接收請求頭中的token並傳遞給變最RequestToken
        String RequestToken=request.getHeader("RequestToken");
        System.out.println("得到RequestToken的值為:"+RequestToken);


        mv.setViewName("/user/getToken");
        return mv;
    }
}

 

2:請求通過jquery的ajax來把請求頭加進去,代碼如下

主要作用通過“ headers: { //鍵值對,多個鍵值之間需要用逗號“,”隔開 "RequestToken":"RequestTokenValue" },”來寫入請求頭

 

<%--
  Created by IntelliJ IDEA.
  User: Dell
  Date: 2020-07-08
  Time: 14:31
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>測試得到請求token</title>
    <link href="${pageContext.request.contextPath}/css/style.css" rel="stylesheet" type="text/css"/>
    <script src="${pageContext.request.contextPath}/js/jquery-3.4.1.js"></script>
</head>
<body>
<h3>測試得到請求token</h3>
<hr/>
<p>響應頭所有鍵值對:<span id="responseAll" style="color:red;"></span></p>
<p>響應頭自定義鍵值對:<span id="responseToken" style="color:red;"></span></p>

</body>
</html>
<script type="text/javascript">
    //定義函數,通過$.ajax()來獲取響應Header中的值,此值后期改為token的值
    function initResponseHeaders() {
        $.ajax(
            {
                headers: {
                    // 把鍵值對放到請求頭中
                   "authentication":"authentication for token later",
                    "RequestToken": localStorage.getItem("responseToken")
                },
                'type': 'head',
                'url': 'http://localhost:8080/shiro_manager/user/getToken',
                'success': function (data, status, xhr) {
                    //把請求頭全部寫在id="response"上
                    $('#responseAll').text(xhr.getAllResponseHeaders());
                    console.log("打印請求頭中的鍵值對:"+xhr.getResponseHeader("ResponseToken"));
                    $('#responseToken').text(xhr.getResponseHeader("ResponseToken"))
                    //方法返回包含指定頭文本的字符串
                    let responseToken = xhr.getResponseHeader("ResponseToken");
                    console.log(responseToken);
                    //把響應頭鍵值對屬性esponseToken的值,存儲到本地localStorage的鍵值對中
                    localStorage.setItem("responseToken", responseToken);
                },
                'error': initResponseHeaders
            })
    }

    //調用
    initResponseHeaders();
</script>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM