当前位置: 首页 > article >正文

如何前端存token,后端获取token

Token是一种用于身份验证和授权的令牌(Token)机制,在网络通信中广泛使用。它是一个字符串,代表着用户的身份或权限,用于验证用户在系统中的访问权限。
在身份验证方面,Token通常用于替代传统的基于会话的身份验证机制,如使用Cookie+Session的方式。使用Token进行身份验证的好处是,服务器不需要在内存中保存用户的会话信息,因为Token本身包含了所有验证所需的信息。这使得Token在分布式系统或无状态的API接口中非常适用。Token通常由服务器生成,并在用户登录或进行身份验证时发放给客户端。客户端将Token存储起来,并在后续的请求中将Token作为身份认证的凭证发送给服务器。服务器接收到Token后,可以通过验证Token的有效性来确认用户的身份和权限。常见的Token类型包括JWT(JSON Web Token)、OAuth 2.0的访问令牌(Access Token)、Bearer Token等。

在前端,使用浏览器提供的 Web Storage(如LocalStorage或SessionStorage)或者使用HTTP Cookie来存储Token。

  1. 使用LocalStorage:

    // 存储Token到LocalStorage
    localStorage.setItem('token', 'your_token_value');
    
    // 从LocalStorage读取Token
    const token = localStorage.getItem('token');
    
    
  2. 使用SessionStorage:

    // 存储Token到SessionStorage
    sessionStorage.setItem('token', 'your_token_value');
    
    // 从SessionStorage读取Token
    const token = sessionStorage.getItem('token');
    
    
  3. 使用HTTP Cookie:

    // 存储Token到Cookie
    document.cookie = 'token=your_token_value; expires=...; path=/';
    
    // 从Cookie读取Token
    const cookies = document.cookie.split(';');
    let token = null;
    cookies.forEach(cookie => {
      const [name, value] = cookie.trim().split('=');
      if (name === 'token') {
        token = value;
      }
    });
    

在前端进行Token验证时,通过在请求头中添加Authorization字段,并将Token值作为其值传递给后端。在后端的代码中,使用@RequestHeader("Authorization") String token来获取请求头中的Token值进行验证和处理。

在Spring Boot后端中,使用@RequestHeader注解来接收前端传递的Token值。
示例:

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

@RestController
public class YourController {

    @GetMapping("/your-endpoint")
    public String yourEndpoint(@RequestHeader("Authorization") String token) {
 		// 处理
        return "Success";
    }
}

使用@RequestHeader("Authorization")注解将前端传递的Token值绑定到token参数上。然后,可以在方法体中使用token进行验证和处理。


http://www.kler.cn/news/163515.html

相关文章:

  • Redisson出现问题总结
  • C++使用模板的注意事项
  • 2024年SEO策略:如何优化您的知识库?
  • 10 大 Mac 数据恢复软件深度评测
  • Linux常用命令详解与示例
  • 【原创】Mac mini M1安装home-brew
  • C语言搭建项目-学生管理系统(非链表)
  • Unity 2022 + Android 接入微信登录
  • HttpComponents: 领域对象的设计
  • 【C#】序列化和反序列化,以及System.Text.Json和Newtonsoft.Json比较
  • EM32DX-C4【C#】站15
  • .NET Core 依赖注入 Microsoft.Extensions.DependencyInjection
  • 修改移远提供的GobiNet、quectel-CM源码,使其支持有方N720 4G模块
  • 视频汇聚/音视频流媒体视频平台/视频监控EasyCVR分享页面无法播放,该如何解决?
  • 算法基础八
  • 分类信息发布小程序效果如何
  • C# --线程的进化史
  • TQ2440开发板-按键驱动程序设计
  • mmdetection测试保存到新的文件夹,无需标签
  • uni-app 设置tabBar的setTabBarBadge购物车/消息等角标
  • vue-element使用html2canvas实现网页指定区域(指定dom元素)截图
  • 机器人说明书---名词解释016课_C++语言_面向对象(6)
  • Endnote使用教程
  • 【数据结构】——队列实现二叉树的功能
  • Linux信息收集
  • JS原生实现浏览器滚动条滚动侧边栏高亮响应
  • 深度学习在计算机视觉中的应用
  • OpenSSL_密码学摘要
  • 基于Springboot+mybatis+mysql+jsp招聘网站
  • 数据可视化:解锁企业经营的智慧之道