跨域(CORS)和JWT 详解

跨域 (CORS) 概念

同源策略 (Same-Origin Policy)
同源策略是一项浏览器安全特性,它限制了一个网页中的脚本如何与另一个来源(域名、协议、端口)的资源进行交互。这对于防止跨站点请求伪造和数据泄露非常重要。

为什么需要跨域?
跨域问题通常发生在前端应用程序试图从不同的域请求数据或资源时。这可能是因为前端应用和后端API托管在不同的域上。跨域解决方案
### CORS (Cross-Origin Resource Sharing)
CORS是一种标准,允许服务器声明哪些源可以访问其资源。在后端Java应用程序中,您可以通过配置响应头来启用CORS。以下是一个Spring Boot示例:

```java
@Configuration
public class CorsConfig {
    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurerAdapter() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/api/**")
                        .allowedOrigins("http://localhost:3000")
                        .allowedMethods("GET", "POST");
            }
        };
    }
}
```

这段代码允许来自`http://localhost:3000`的跨域请求访问`/api`端点。

# JSON Web Tokens (JWT) 概念

什么是JWT?
JWT是一种开放标准(RFC 7519),定义了一种紧凑且自包含的方式来表示信息,用于在各方之间安全地传输信息。它通常用于对用户进行身份验证和授权。

JWT 结构
JWT由三部分组成:头部(Header)、载荷(Payload)、签名(Signature)。
- 头部包含指定JWT的类型和所用的签名算法。
- 载荷包含声明,声明了一些实体(通常是用户)和一些数据。
- 签名用于验证JWT的完整性。 

生成和验证JWT
生成JWT
在Java中,您可以使用库如`jjwt`来生成JWT令牌。以下是一个简单的示例:

```java
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

String token = Jwts.builder()
    .setSubject("user123")
    .signWith(SignatureAlgorithm.HS256, "secretKey")
    .compact();
```

验证JWT
在后端,您可以验证JWT令牌以确保其完整性和有效性。以下是一个示例:

```java
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureException;

try {
    Claims claims = Jwts.parser()
        .setSigningKey("secretKey")
        .parseClaimsJws(token)
        .getBody();
    // 验证通过
} catch (SignatureException e) {
    // 令牌无效
}
```

跨域和JWT的结合应用

通常,前端应用会向后端API发送JWT令牌以进行身份验证和授权。后端应用会验证JWT的签名,并根据令牌中的声明执行相应的操作。

以下是一个示例,前端使用JWT令牌在跨域请求中向后端进行身份验证:

```javascript
// 前端示例代码
fetch('http://api.example.com/data', {
    method: 'GET',
    headers: {
        'Authorization': 'Bearer ' + jwtToken
    }
})
.then(response => {
    // 处理响应
});
```

常见问题和最佳实践

 跨域和JWT的常见问题
- 跨域问题:确保正确配置CORS以避免跨域问题。
- JWT安全性:不要在JWT中存储敏感信息,限制令牌的生命周期。

 最佳实践
- 使用HTTPS来保护数据传输。
- 避免将敏感信息存储在JWT中。
- 使用长且随机的密钥来签署JWT。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/131738.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文阅读—— BiFormer(cvpr2023)

论文:https://arxiv.org/abs/2303.08810 github:GitHub - rayleizhu/BiFormer: [CVPR 2023] Official code release of our paper "BiFormer: Vision Transformer with Bi-Level Routing Attention" 一、介绍 1、要解决的问题:t…

Mybatis的工作原理

一、Mybatis的工作原理 1.构建 mybatis 配置文件 构建 mybatis 的config,xml,java的mapper&#xff0c;entity类 config文件 <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0/…

0002Java安卓程序设计-基于Uniapp+springboot菜谱美食饮食健康管理App

文章目录 开发环境 《[含文档PPT源码等]精品基于Uniappspringboot饮食健康管理App》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功 编程技术交流、源码分享、模板分享、网课教程 &#x1f427;裙&#xff1a;776871563 功能介绍&#xff…

XPATH 注入漏洞

一、XPATH 1、XPATH 概述&#xff1a; XPath 是一种查询语言&#xff0c;它描述了如何在 XML 文档中查找特定元素&#xff08;包括属性、处理指令等&#xff09;。既然是一种查询语言&#xff0c;XPath 在一些方面与 SQL 相似&#xff0c;不过&#xff0c;XPath 的不同之处在于…

ES-初识ES

文章目录 介绍ElasticSearchElasticSearch的主要功能ElasticSearch的主要特性ElasticSearch的家族成员LogStashKibanaBeats ELK&#xff08;ElasticSearch LogStash Kibana&#xff09;的应用场景与数据库集成指标采集/日志分析 安装和配置ElasticSearch一、安装1、下载ES安装…

深度学习实战:基于TensorFlow与OpenCV的手语识别系统

文章目录 写在前面基于TensorFlow与OpenCV的手语识别系统安装环境一、导入工具库二、导入数据集三、数据预处理四、训练模型基于CNN基于LeNet5基于ResNet50 五、模型预测基于OpenCV 写在后面 写在前面 本期内容&#xff1a;基于TensorFlow与OpenCV的手语识别系统 实验环境&…

lv9 嵌入式开发 数据库sqlite

1 数据库基本概念 数据&#xff08;Data&#xff09; 能够输入计算机并能被计算机程序识别和处理的信息集合 数据库 &#xff08;Database&#xff09; 数据库是在数据库管理系统管理和控制之下&#xff0c;存放在存储介质上的数据集合 2 常用的数据库 大型数据库…

过了面试,后面的在线测评还会刷人吗?

过了面试&#xff0c;后面的在线测评还会刷人吗&#xff1f;完全有可能刷&#xff0c;如果不是为了刷&#xff0c;何必要给你做线上测评&#xff0c;我说的有道理不&#xff1f; 好吧&#xff0c;说到为什么在线测评要刷人&#xff0c;怎么刷&#xff1f; 怎么才能确保不被刷&…

Idea 对容器中的 Java 程序断点远程调试

第一种&#xff1a;简单粗暴型 直接在java程序中添加log.info()&#xff0c;根据需要打印信息然后打包覆盖&#xff0c;根据日志查看相关信息 第二种&#xff1a;远程调试 在IDEA右上角点击编辑配置设置相关参数在Dockerfile中加入 "-jar", "-agentlib:jdwp…

【移远QuecPython】EC800M物联网开发板的硬件PWM和PWM输出BUG

【移远QuecPython】EC800M物联网开发板的硬件PWM和PWM输出BUG 文章目录 导入库初始化PWM开启PWMPWM硬件BUG附录&#xff1a;列表的赋值类型和py打包列表赋值BUG复现代码改进优化总结 py打包 导入库 from misc import PWM_V2或者 from misc import PWM但我觉得PWM_V2好用 初…

Adobe:受益于人工智能,必被人工智能反噬

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 总结&#xff1a; &#xff08;1&#xff09;Adobe(ADBE)受益于生成式人工智能的兴起&#xff0c;其一直能实现两位数的收入增长就证明了这一点。 &#xff08;2&#xff09;在生成式人工智能兴起时&#xff0c;该公司就快…

C#WPF命令行参数实例

命令行参数这样是一种技术,传递一组参数到你希望开始的应用,以某种方式影响它。 如使用Windows自带的记事本,在开始菜单选择运行或者按一下Win+R键,输入:notepad.exe c:\Windows\win.ini。这就在记事本中打开了win.ini文件。记事本简单的寻找一条或多条参数,然后使用它们…

基于若依的ruoyi-nbcio流程管理系统增加仿钉钉流程设计(六)

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 这节主要讲条件节点与并发节点的有效性检查&#xff0c;主要是增加这两个节点的子节点检查&#xff0c;因为…

【从零开始学习Redis | 第五篇】基于布隆过滤器解决Redis的穿透问题

前言&#xff1a; 在如今的开发中&#xff0c;使用缓存中间件Redis已经成为一项很广泛的技术&#xff0c;Redis的高性能大大优化了我们的服务器性能&#xff0c;缓解了在高并发的情况下服务器的压力。它基于缓存的形式&#xff0c;在内存中保存数据&#xff0c;减少对磁盘的IO操…

听GPT 讲Rust源代码--library/std(15)

题图来自 An In-Depth Comparison of Rust and C[1] File: rust/library/std/src/os/wasi/io/fd.rs 文件路径&#xff1a;rust/library/std/src/os/wasi/io/fd.rs 该文件的作用是实现与文件描述符&#xff08;File Descriptor&#xff09;相关的操作&#xff0c;具体包括打开文…

✔ ★【备战实习(面经+项目+算法)】 11.5学习

✔ ★【备战实习&#xff08;面经项目算法&#xff09;】 坚持完成每天必做如何找到好工作1. 科学的学习方法&#xff08;专注&#xff01;效率&#xff01;记忆&#xff01;心流&#xff01;&#xff09;2. 每天认真完成必做项&#xff0c;踏实学习技术 认真完成每天必做&…

MFC 基础篇(一)

目录 一.SDK编程 二.为什么要学MFC&#xff1f; 三.MFC能做什么&#xff1f; 四.MFC开发环境搭建 五.MFC项目创建 六.消息映射机制 一.SDK编程 Application Programming Interface 应用程序编程接口。 Software Development Kit 软件开发工具包&#xff0c;一般会包括A…

indexedDB笔记

indexedDB 该部分内容主要源于https://juejin.cn/post/7026900352968425486 常用场景&#xff1a;大量数据需要缓存在本地重要概念 仓库objectStore&#xff1a;类似于数据库中的表&#xff0c;数据存储媒介索引index&#xff1a;索引作为数据的标志量&#xff0c;可根据索引获…

次小生成树学习笔记

次小生成树有严格次小生成树和非严格次小生成树之分。常见的是严格次小生成树。 严格次小生成树的定义如下&#xff1a; 如果最小生成树选择的边集是 E M E_M EM​&#xff0c;严格次小生成树选择的边集是 E S E_S ES​&#xff0c;那么需要满足&#xff1a;( v a l u e ( e…

Spring Boot 面试题——常用注解

目录 Spring Bean将一个类声明为 Bean自动装配 Bean声明 Bean 的作用域 前端后传值处理常见的 HTTP 请求类型读取配置文件定时任务全局 Controller 层异常处理 Spring Bean 将一个类声明为 Bean Component&#xff1a;通用的注解&#xff0c;可标注任意类为 Spring 组件。如果…