spring boot提供了两种跨域配置方式

1.全局跨域

2.局部跨域

全局跨域

package com.tons.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration
public class CorsConfig implements WebMvcConfigurer { @Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**") // 所有mapping路径
.allowedOriginPatterns("*") // 所有域 spring-boot 2.4.0及以下使用.allowedOrigins("*")
.allowedMethods("POST","GET","PUT","DELETE","OPTIONS") // 请求方式
.allowedHeaders("*") // 所有方法头
.maxAge(168000) // 等待间隔时间(时间过了则需再次认证)
.allowCredentials(true); // cookie
}
}

局部跨域。使用CrossOrigin注解,可修饰类或者方法。

@PostMapping("/log")
@ResponseBody
@CrossOrigin
public String logPost(@RequestBody JSONObject json, HttpSession session) {
String username = json.getString("username");
String password = json.getString("password");
User user = userService.getUserById(username, password);
if (user == null) return RestResult.Error("账号或者密码错误!");
session.setAttribute("user", user);
return RestResult.OK(UserTokenUtils.encodeUserToKen(user));
}

需要注意的是既是后端开启跨域并允许携带cookie,但是前端每次访问后端cookie还是会不断变化。导致HttpSession无法使用

如果想使用HttpSession(后端做无状态服务器,就不用HttpSession。转而使用JWT技术),就需要

1.每次请求携带cookie

// 这是ajax请求使用axios.js
axios.defaults.withCredentials = true // axios发送请求带上cookie,有cookie就有session_id

2.设置反向代理

开发阶段 vue-cli

devServer: {
port: 8080,
// 设置代理
proxy: {
// 替换了axios请求中的/api
'/api': {
// 代理地址,这里设置的地址会代替axios中设置的baseURL
target: 'http://192.168.100.213:8088/',
// 如果接口跨域,需要进行这个参数配置
changeOrigin: true,
ws: true,
pathRewrite: {
'^/api': ''
}
}
}
}

生产阶段 ngnix

server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
# 配置代理
location /api/ {
proxy_pass http://192.168.100.159:8088/;
proxy_set_header Host 127.0.0.1;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

spring boot 跨域的更多相关文章

  1. spring boot跨域请求访问配置以及spring security中配置失效的原理解析

    一.同源策略 同源策略[same origin policy]是浏览器的一个安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源. 同源策略是浏览器安全的基石. 什么是源 源[orig ...

  2. spring boot跨域设置

    定义 跨域是指从一个域名的网页去请求另一个域名的资源 跨域背景 限制原因 如果一个网页可以随意地访问另外一个网站的资源,那么就有可能在客户完全不知情的情况下出现安全问题 为什么要跨域 公司内部有多个不 ...

  3. spring boot跨域问题

    跨域是指不同域名之间相互访问.跨域,指的是浏览器不能执行其他网站的脚本.它是浏览器的同源策略造成的,是浏览器对JavaScript施加的安全限制.也就是如果在A网站中,我们希望使用Ajax来获得B网站 ...

  4. spring boot 跨域请求

    场景 网站localhost:56338要访问网站localhost:3001的服务 在网站localhost:3001中增加CORS相关Java Config @Configuration @Ord ...

  5. spring boot跨域问题的简便解决方案

    刚学spring boot的时候被跨域问题拦住好久,最终好不容易从网上抄了别人的极端代码才解决. 但是前些天看一同事的代码时,发现spring boot中用注解就可以解决. 在controller上添 ...

  6. Spring Boot 跨域访问

    如何在 Spring Boot 中配置跨域访问呢? Spring Boot 提供了对 CORS 的支持,您可以实现WebMvcConfigurer 接口,重写addCorsMappings 方法来添加 ...

  7. spring boot 跨域访问处理

    问题场景:由于项目中使用到跨域访问,今天也得到高人指点,所以写出来分享给大家.可能是考虑到前后端分离,前端后端服务器不在一台机器上,出现这种跨域访问的情况.正常情况下本地访问是没有问题,但是遇到这种非 ...

  8. SPRING BOOT跨域访问处理

    尊重原创:http://blog.csdn.net/ruiguang21/article/details/77878933 问题场景:由于项目中使用到跨域访问,今天也得到高人指点,所以写出来分享给大家 ...

  9. spring boot 跨域问题

    public class WebMvcConfig implements WebMvcConfigurer { @Override  public void addInterceptors(Inter ...

  10. Spring Boot跨域解决方案

    一.什么是跨域 为保证浏览器的安全,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源,这称之为同源策略,如果一个请求地址里的协议.域名.端口号都相同,就属于同源.依据浏览器同源策略,非同源脚 ...

随机推荐

  1. 记开源项目:DotNetCore.CAP.MySql问题分析:only mysqlparameter objects may be stored

    1.  简介 最近在学习分布式事务及解决方案,最终找到了开源项目DotNetCore.CAP ,因为自己用的MySql数据库比较多.于是也使用MySQL+EFCore+RabbitMQ+CAP实现事务 ...

  2. windows上用vs2017静态编译onnxruntime-gpu CUDA cuDNN TensorRT的坎坷之路

    因为工作业务需求的关系,需编译onnxruntime引入项目中使用,主项目exe是使用的vs2017+qt5.12. onnxruntime就不用介绍是啥了撒,在优化和加速AI机器学习推理和训练这块赫 ...

  3. Scrum敏捷开发方法实践

    前言   作者所在的公司在项目开发的过程中采用着当下互联网公司中流行的小步快跑开发策略,特别借鉴了敏捷开发中的迭代递增思想来指导项目的开发.我们经过对相关敏捷开发方法的调查研究,最终采用了Scrum敏 ...

  4. JavaScript:代码应该编写在哪里?

    我们可以将JS的代码,编写在三个地方. 但是无论编写在哪里,最后它都会嵌入进网页代码中,被浏览器执行. 编写在script标签中 我们可以直接在HTML的script标签中,编写大段JS代码. 编写在 ...

  5. C++进阶(unordered_set+unordered_map模拟实现)

    unordered_set unordered_set是以无特定顺序存储唯一元素的容器,并且允许根据它们的值快速检索单个元素,是一种K模型. 在unordered_set中,元素的值同时是它的key, ...

  6. java下载网络文件的N种方式

    java下载网络文件的N种方式 通过java api下载网络文件的方法有很多,主要方式有以下几种: 1.使用 common-io库下载文件,需要引入commons-io-2.6.jar public ...

  7. Mysql--回顾提要

    一.写在前 知识学了就忘!不用就忘!我太健忘!特此记录!用于复习打卡!Mysql干就完事了! 二.来辣! MyISAM表把自增主键最大id记录到文件,重启也不会丢.InnoDB记录到内存,重启数据库和 ...

  8. 【原创】项目六 Load Of The Root

    实战流程 新创建文件夹,在这个文件夹里进行操作 nmap扫描下网段 根据nmap逐个排查,发现目标主机,但只有22端口 因此进一步扫描22端口的具体信息,没有扫出很有用的信息 发现靶场又提示一个用户, ...

  9. drf-三大认证源码分析、基于APIView编写分页、异常处理

    1.权限源码分析 1.APIView源码497行:self.initial(request, *args, **kwargs)中进行了三大认证. 2.在initial的源码中,以下三行代码是进行三大认 ...

  10. mysql15 sql优化-小表驱动大表 IN和EXITS

    转:https://blog.csdn.net/qq_27409289/article/details/85963089 1.IN查询分析 select * from a  where a.id in ...