首页 > 其他分享 >spring boot 跨域

spring boot 跨域

时间:2022-12-13 13:22:55浏览次数:48  
标签:axios 跨域 spring boot cookie proxy user

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;
    }
}

标签:axios,跨域,spring,boot,cookie,proxy,user
From: https://www.cnblogs.com/heirem/p/16977847.html

相关文章

  • Spring 集成支持通过 SFTP 进行文件传输操作
    Spring集成支持通过SFTP进行文件传输操作。安全文件传输协议(SFTP)是一种网络协议,可让您通过任何可靠的流在Internet上的两台计算机之间传输文件。SFTP协议需要一个安......
  • pom之 热部署spring-boot-devtools
    pom之热部署spring-boot-devtools <!--    热部署 Ctrl+Shift+Alt+/-->    <dependency>      <groupId>org.springframework.boot......
  • pom之 数据源信息 spring-boot-starter-jdbc ,mysql-connector-java
    <!--    数据源信息--><!--    <dependency>--><!--      <groupId>org.springframework.boot</groupId>--><!--      <arti......
  • Spring Integration 的资源支持
    资源入站通道适配器建立在Spring的抽象之上,以支持跨各种实际类型的底层资源(如文件、URL或类路径资源)的更大灵活性。因此,它与文件入站通道适配器类似,但比文件入站通道适......
  • Spring Integration 对RSocket 支持
    RSocketSpring集成模块()允许执行 RSocket应用协议​。​​spring-integration-rsocket​​您需要将此依赖项包含在项目中:<dependency><groupId>org.springframewor......
  • SpringBootApplication
    packagecom.example.demo;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;/** *项......
  • 【java-01】springboot利用sharding jdbc实现读写分离
    写在开头打算把自己的java后端学习过程分享给大家,也方便之后自己回顾。从这里开始~目前在学习黑马的瑞吉外卖新手入门项目,这篇随笔记录的是项目优化之一读写分离先列出......
  • 深入理解 Spring 事务:入门、使用、原理
    大家好,我是树哥。Spring事务是复杂一致性业务必备的知识点,掌握好Spring事务可以让我们写出更好地代码。这篇文章我们将介绍Spring事务的诞生背景,从而让我们可以更清晰......
  • Spring框架之控制反转IoC(Inversion of Control)的理解
    简单理解:控制反转就是将代码的调用权(控制权)从调用方转移给被调用方(服务提供方)。解释一下:如果我们需要创建某个类,就需要程序员去修改代码,然后才可以得到想要的类。反转的意思......
  • java.lang.ClassNotFoundException: SpringSkinFactory抽象工厂模式范例报错
    示例代码:packageAbstractFactory.utils;importjavax.xml.parsers.*;importorg.w3c.dom.*;importjava.io.*;publicclassXMLUtil{//该方法用于从XML配......