SpringMVC跨域写入Cookie

前后端分离的项目,SpringMVC+Tomcat(SpringBoot),前端Vue+axios。

不建议后端去写入Cookie,一般都是在前端写入Cookie,如果后端使用:@CrossOrigin(origins = "http://localhost", allowCredentials = "true"),解决写入Cookie跨域问题的话,只对http://localhost这个地址生效。

下面是示例,把你不需要的删掉就可以。

前端请求代码:

withCredentials: true:进行跨域请求时使用的一个配置选项。它用于指示浏览器在发送跨域请求时是否应该携带源网站的身份凭证(例如 Cookies、HTTP 认证信息等。

axios({method: 'POST',url: requestPrefixUrl.value + "teacher/login",data: Teacher,// 进行跨域请求时使用的一个配置选项。它用于指示浏览器在发送跨域请求时是否应该携带源网站的身份凭证(例如 Cookies、HTTP 认证信息等withCredentials: true
}).then(res => console.log(res)).catch(error => {console.error(error);
});

后端代码

controller

@CrossOrigin(origins = "http://localhost", allowCredentials = "true"):一定要写,否则前端会报跨域的错误,http://localhost为前端web服务器的ip地址,写成http://localhost:80是不行的!

@CrossOrigin(origins = "http://localhost", allowCredentials = "true")
@RestController
@ResponseBody
@RequestMapping("/teacher")
public class TeacherLoginController {final TeacherLoginService tLoginService;public TeacherLoginController(TeacherLoginService teacherLoginService) {this.tLoginService = teacherLoginService;}@PostMapping("/login")public String LoginVerification(@RequestBody Teacher teacher, HttpServletRequest request, HttpServletResponse response) {....//添加登录的密钥tLoginService.addLoginSecretKeyCookieToSession(teacher, request, response);return "OK";}
}

Service

@Service
public class TeacherLoginService {final TeacherMapper tMapper;@Autowiredpublic TeacherLoginService(TeacherMapper tMapper) {this.tMapper = tMapper;}/*** 用于给教师验证身份添加密钥** @param teacher 教师账号信息*/public void addLoginSecretKeyCookieToSession(Teacher teacher, HttpServletRequest request, HttpServletResponse response) {// 创建一个名为"teacherSecretKey",值为教师账号加密后的secretKeyCookie cookie = new Cookie("teacherSecretKey", "John");cookie.setMaxAge(3 * 24 * 60 * 60); // 设置cookie的最大生存时间为3天(单位为秒)cookie.setSecure(false); // 设置cookie的Secure标志为false,因为没有使用HTTPS// 设置cookie的HttpOnly标志为true,cookie不能通过客户端脚本(如JavaScript)访问,只能通过HTTP请求访问cookie.setHttpOnly(true);cookie.setPath("/");// 将cookie添加到HTTP响应中response.addCookie(cookie);// 注意:网站没有通过HTTPS提供,你可能需要将SameSite设置为Lax或者Strict,或者完全不设置SameSite属性。// 网站通过HTTPS提供,你可以将SameSite设置为None,并将Secure设置为true。String headerValue = cookie.toString() + "; SameSite=Lax";// 将新的Set-Cookie头添加到HTTP响应中response.addHeader("Set-Cookie", headerValue);}
}

 测试后写入成功。 

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

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

相关文章

SpringBoot实战(二十)集成Druid连接池

目录 一、简介1.定义2.特点3.竞品对比 二、搭建测试项目1.Maven依赖2.yaml配置2.1 JDBC配置2.2 连接池配置2.3 监控配置 三、测试1.查看监控页面2.单元测试 四、补充:1.如何打印慢SQL?2.去除广告3.如何手动获取监控内容 一、简介 1.定义 Druid数据库连…

EtherCAT转TCP/IP网关ethercat最大通讯距离

天啊!你们听说了吗?数据互联互通问题终于迎来了突破性进展!作为生产管理系统的关键部分,数据互联互通一直是个大问题。然而,ETHERCAT和TCP/IP是两个不同的协议,它们之间的通讯一直是个大 问题。但是&#x…

【论文基本功】【LaTeX】参考文献中常见属性的用法及特点(bib文件)【IEEE论文】

【论文基本功】【LaTeX】参考文献中常见属性的用法及特点(bib文件)【IEEE论文】 一、author(作者)1. 使用方法用法1:作者名字的两种写法用法2:使用and连接不同作者姓名用法3:超过3个作者时如何使…

使用Jetpack Compose集成WebView

在Android开发中,WebView是一个非常重要的组件,它可以用来显示网页或加载在线内容。然而,在Jetpack Compose(Google推出的新的UI工具包)中,目前没有内置的WebView Composable。但不必担心,你可以…

量化风控算法详解之CatBoost

CatBoost是俄罗斯的搜索巨头Yandex在2017年开源的机器学习库,与XGBoost、LightGBM并称为GBDT三大主流神器库。LightGBM和XGBoost已经在各领域得到了广泛的应用,而Yandex的CatBoost作为后起之秀则是号称比XGBoost和LightGBM在算法准确率等方面表现更为优秀…

ESP32(掌控板) 陀螺仪显示与RGB灯

ESP32(掌控板) 陀螺仪显示与RGB灯 本程序图形化显示陀螺仪位置(注意要换算),根据陀螺仪位置控制RGB灯颜色并有3种颜色组合和关灯可选,通过触摸按键调节亮度。 图形化程序如下 Arduino代码如下 /*!* MindP…

【记录】SMB|Windows下修改SMB端口并挂载

环境:Window11 使用背景:勒索病毒导致445端口不安全,故而该端口在服务器端被全面禁用了,如需使用SMB服务需要换个SMB服务端口。 方法1:端口转发 winx点开管理员权限的终端: 运行以下指令,检查…

数字电路设计——加法器

数字电路设计——加法器 半加器 半加器只有两个一位宽的输入 a a a 和 b b b ,输出 a b ab ab 所产生的本位和 s u m sum sum 和进位 c o u t cout cout。组合逻辑为: S A ⊕ B , C o u t A B S A \oplus B,Cout AB SA⊕B,CoutAB 真值表和原…

经典神经网络(7)DenseNet及其在Fashion-MNIST数据集上的应用

经典神经网络(7)DenseNet及其在Fashion-MNIST数据集上的应用 1 DenseNet的简述 DenseNet不是通过更深或者更宽的结构,而是通过特征重用来提升网络的学习能力。 ResNet 的思想是:创建从“靠近输入的层” 到 “靠近输出的层” 的直连。而DenseNet 做得更…

python环境

卸载旧环境 wini 打开应用卸载 删除python解释器和pycharm 删除配置文件夹JetBrains C:\Users\CJC\AppData\Roaming\JetBrains 安装 安装python解释器 安装pycharm 查看或设置该项目的解释器和安装包 快捷键 全局搜索 双击shift 当前文件中搜索 ctrl f 查看函数…

【Linux】基础开发工具——yum篇

目录 📖Linux下安装软件的三种方案📰源代码安装📰rpm安装📰yum安装 📖Linux软件包管理器yum📰rz、sz📰查看软件包📰软件安装📰软件删除 📖yum源问题&#x1f…

如何查看 当前安装的vue版本

目录 1 实现 1 实现 要查看当前安装的 Vue 版本,可以使用以下方法: 在终端或命令提示符中运行以下命令: vue --version如果你使用的是 Vue CLI 创建的项目,可以在项目的根目录中找到 package.json 文件。在该文件中&#xff0c…