SpringBoot + VUE 解决 后台的 session 的 null 的问题

本文主要介绍了前端跨域访问后端接口时遇到的sessionID不一致问题,导致无法获取session内容。解决方案是在vue中全局设置axios的withCredentials为true,允许携带cookie,同时在后端配置WebMvcConfigurer,允许跨域并设置允许携带证书。经过这些处理,确保了跨域请求时sessionID的一致性,从而能正常获取session信息。
问题原因

前端跨域访问后端接口, 在浏览器的安全策略下默认是不携带cookie的, 所以每次请求都开启了一次新的会话.
在后台打印sessionID我们会发现, 每次请求的sessionID都是不同的, 既然每次请求都是一个新的会话, 那我们去获取session的时候自然就是null了.

前端处理
  • 在 vue 中所有引入 axios 的地方添加如下代码,允许跨域携带cookie
import axios from 'axios'
axios.defaults.withCredentials = true     // 添加代码:允许跨域携带cookie	
后端处理
  • 新建 WebAppConfig ,实现 WebMvcConfigurer 接口,允许前端跨域
public class WebAppConfig implements WebMvcConfigurer {
    //前端跨域
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")//设置允许跨域的路径
                .allowedOrigins("*")//设置允许跨域请求的域名
                .allowCredentials(true)//是否允许证书 不再默认开启
                .allowedMethods("GET", "POST", "PUT", "DELETE")//设置允许的方法
                .maxAge(3600);//跨域允许时间
    }
}

问题解决, 重启工程后我们再次打印每次请求的sessionID就会发现sessionID是一致的, 当然也就可以获取我们存入session的内容了.

### 基于Spring Boot和Vue2的人脸识别登录系统 #### 后端实现 为了构建人脸识别登录功能,后端采用Spring Boot框架。核心在于创建API接口用于处理前端发送过来的人脸图像数据,并将其传递给人脸识别服务进行验证。 ```java @RestController @RequestMapping("/auth/face") public class FaceAuthController { @PostMapping("/faceLogin") public ResponseEntity<UserInfo> faceLogin(@RequestParam("image") MultipartFile imageFile) { try { // 将文件转换成字节数组并调用人脸识别服务 byte[] bytes = imageFile.getBytes(); UserInfo userInfo = faceService.recognize(bytes); if (userInfo != null && userInfo.getId() != null){ return new ResponseEntity<>(userInfo, HttpStatus.OK); } throw new RuntimeException("User not found"); } catch (IOException e) { logger.error(e.getMessage(), e); return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); } } } ``` 此代码片段展示了如何接收来自客户端的图片文件并通过`MultipartFile`参数获取它[^1]。接着将接收到的数据交给专门的服务层方法来进行实际的身份认证逻辑处理。 对于人脸注册的功能,则需提供另一个POST API `/registerFace` 接收用户的ID以及对应的面部照片作为输入参数保存至数据库中以便后续匹配使用[^3]。 #### 前端实现 在前端方面,利用Vue.js及其组件库Element UI来搭建用户界面。主要负责捕获摄像头拍摄的照片或上传本地图片给后台做身份校验工作。 ```javascript // src/api/auth.js import request from '@/utils/request' export function faceLogin(formData) { return request({ url: '/auth/face/faceLogin', method: 'post', data: formData, headers: {'Content-Type': 'multipart/form-data'} }) } export function registerFace(formData, userId) { return request({ url: '/auth/face/registerFace', method: 'post', data: formData, params: {id: userId}, headers: {'Content-Type': 'multipart/form-data'} }); } ``` 上述JavaScript函数定义了两个HTTP请求:一个是用来发起人脸识别登录尝试;另一个则是用于新用户将自己的脸部特征录入系统之中。 当用户点击登录按钮时,会触发一个事件处理器收集表单中的信息(即包含有用户提交的脸部图像),之后再通过Axios库向服务器发出带有这些资料的AJAX POST 请求完成整个流程。 #### 数据存储与安全措施 考虑到安全性,在设计过程中还需要考虑以下几个要点: - 用户敏感个人信息应当加密存储; - 对传输过程采取HTTPS协议保护通信链路的安全性; - 使用JWT(JSON Web Token)或其他机制管理Session状态以防止CSRF攻击等问题发生。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值