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

案例开发 - 日程管理 - 第六期

我们在第五期完整了前端代码的重构,在第六期,使用 Axios 的技术完成前后端数据交互。

在之前的 demo-schedule 文件夹中,先下载 axios 依赖 -->  npm install axios

创建 src/utils/request.js 文件

import axios from 'axios'// 创建 instance 实例
const instance = axios.create({baseURL:'http://localhost:8080/'
})// 添加请求拦截
instance.interceptors.request.use(//设置请求头配置信息config => {// 处理指定的请求头return config},// 设置请求错误处理函数error => {return Promise.reject(error)}
)// 添加响应拦截器
instance.interceptors.response.use(// 设置响应正确时的处理函数response => {return response},// 设置响应异常时的处理函数error => {return Promise.reject(error)}
)// 默认导出
export default instance

然后在 regist.vue 中进行操作

此时再打开 idea 启动后端服务器,在前端的注册页面,对用户名进行登录时,会发现控制台有如下报错:

我们称这种错误为:浏览器同源禁止错误。

即,我们的浏览器,访问的是前端页面的地址,http://localhost:5173,但是却从后端地址 http://localhost:8080 给我们返回数据,浏览器认为这样地址发生了变化而得到的数据是不安全的,因此报错。

解决:

1. 代理模式:我们浏览器找到前端服务器后,让前端服务器去找后端服务器来获得数据,然后再由前端服务器将数据给我们返回,整个过程中,我们并不知道后端服务器的存在

2. 预检模式:

浏览器知道了后端服务器的存在,向后端服务器发两次请求,第一次称为预检,即确定一下后端服务器的数据是否安全,后端服务器告诉浏览器,放心吧哥们,我没病,然后浏览器再向后端服务器发送请求获取数据。

在这个过程中,后端服务器中就需要设置一个跨域过滤器,判断是不是预检请求,如果是,则响应允许跨域的信息,请求到此为止。如果不是,则放行。

因前端页面已经接收数量较多的请求,所以本次不使用代理模式解决问题。

跨域过滤器代码,我们在后端的项目中的 filter 文件夹中创建 CrossFilter 文件

代码如下:

package com.zzz.schedule.filter;/** @author zzr* @date: 2025/09/09  09:33* @description: 跨域过滤器*/import com.zzz.schedule.common.Result;
import com.zzz.schedule.util.WebUtil;
import jakarta.servlet.*;
import jakarta.servlet.annotation.WebFilter;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;@WebFilter("/*")
public class CrossFilter implements Filter {@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {HttpServletRequest request = (HttpServletRequest) servletRequest;System.out.println(request.getMethod());HttpServletResponse response = (HttpServletResponse) servletResponse;response.setHeader("Access-Control-Allow-Origin", "*");response.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, OPTIONS, DELETE, HEAD");response.setHeader("Access-Control-Max-Age", "3600");response.setHeader("Access-Control-Allow-Headers", "access-control-allow-origin, authority, content-type, version-info, X-Requested-With");// 如果是跨域预检请求,则直接在此响应200业务码if(request.getMethod().equalsIgnoreCase("OPTIONS")){WebUtil.writeJson(response, Result.ok(null));}else{// 非预检请求,放行即可filterChain.doFilter(servletRequest, servletResponse);}}
}

未来我们使用框架,直接用一个 @CrossOrigin 就可以解决跨域问题了

注意,我们配置完上面的跨域过滤器后,还需要对之前 LoginFilter 过滤器进行删除

因为我们这里不再使用 cookie 和 session 方式记录用户状态了,未来使用 token,所以可直接删除~

这样,返回前端的登录页面,再输入用户名:

此时就可以正常打印 response 对象了

接下来,为注册添加一个 @click 属性

实现 regist 方法:

后端代码中的 SysUserController 中的 regist 方法中,我们需要对代码进行改造,接收前端发来的 json 数据,并转换为 User 对象,获取信息

框中的改造代码,其实在之前的 WebUtil 类中的 readJson 方法中已经实现:

我们可在 regist 中直接应用

此时,重新部署后端服务器,然后前端页面点击注册:

数据库就会多一个 zhangsanx 的用户

接下来实现,当注册成功后,自动跳转登录页面

接下来操作登录页:

导入 request.js

后端代码:

前端代码:

完!


文章转载自:

http://PBTdulmb.kwqwp.cn
http://EHYnf0sc.kwqwp.cn
http://r8ihPMqV.kwqwp.cn
http://ETfDz871.kwqwp.cn
http://2aD66L7g.kwqwp.cn
http://EWaMZDv2.kwqwp.cn
http://aOhvk2SE.kwqwp.cn
http://thugRkds.kwqwp.cn
http://bLCDIvwy.kwqwp.cn
http://NEM4nWIV.kwqwp.cn
http://5SHuagoF.kwqwp.cn
http://O9kO5KY8.kwqwp.cn
http://xR1Ld2Uu.kwqwp.cn
http://eBLvK925.kwqwp.cn
http://lPsUqAej.kwqwp.cn
http://rOpoaC8d.kwqwp.cn
http://U7FxA6oV.kwqwp.cn
http://DqdhFJhu.kwqwp.cn
http://oiImMgAp.kwqwp.cn
http://9kVV08d1.kwqwp.cn
http://uz04aPIp.kwqwp.cn
http://I2TpfC6b.kwqwp.cn
http://9aWnRgAs.kwqwp.cn
http://f0gkijeJ.kwqwp.cn
http://iXbxFQy7.kwqwp.cn
http://rkBKHqDn.kwqwp.cn
http://FtghFnpF.kwqwp.cn
http://bs7QZ2HD.kwqwp.cn
http://Br3q8MlG.kwqwp.cn
http://bQQ6j4TO.kwqwp.cn
http://www.dtcms.com/a/374799.html

相关文章:

  • TCP 三次握手、四次挥手
  • 问题排查:之前运行正常的系统,突然批量接口报 404
  • 【Java实战㊱】Spring Boot邂逅Redis:缓存加速的奇妙之旅
  • Spring Cache 多租户缓存隔离解决方案实践
  • Mybatis-12 第三方缓存-EhCache
  • 【C++】特别的程序错误处理方式——异常机制
  • 嵌入式设备上mqtt库的使用
  • 【Linux基础知识系列:第一百二十六篇】使用dd命令进行磁盘复制
  • 从零到一使用Linux+Nginx+MySQL+PHP搭建的Web网站服务器架构环境——LNMP(上)
  • 使用虚拟机Ubuntu搭建mosquito服务器 使esp32、上位机通信
  • 云计算技术栈
  • 国产时序数据库选型指南-从大数据视角看透的价值
  • 东京本社招聘 | 财务负责人 多个日本IT岗位(Java/C++/Python/AWS 等),IT营业同步招募
  • AWS ALB 详解:智能流量调度器
  • Django REST框架:ModelViewSet全面解析
  • 基于Centos7.9搭建svn服务端
  • PyTorch 和nn.Conv2d详解
  • pytorch基本运算-分离计算
  • 基于容器化云原生的 MySQL 及中间件高可用自动化集群项目
  • “图观”端渲染场景编辑器
  • 构建分布式京东商品数据采集系统:基于 API 的微服务实现方案
  • HTML5点击转圈圈 | 深入了解HTML5技术中的动态效果与用户交互设计
  • springboot rabbitmq 延时队列消息确认收货订单已完成
  • CString(MFC/ATL 框架)和 QString(Qt 框架)
  • Sklearn(机器学习)实战:鸢尾花数据集处理技巧
  • 工具框架:Scikit-learn、Pandas、NumPy预测鸢尾花的种类
  • AI GEO 优化能否快速提升网站在搜索引擎的排名?​
  • nvm和nrm的详细安装配置,从卸载nodejs到安装NVM管理nodejs版本,以及安装nrm管理npm版本
  • 对口型视频怎么制作?从脚本到成片的全流程解析
  • 从“能说话”到“会做事”:AI Agent如何重构日常工作流?