草庐IT

spring boot 跨域

黑人的乔丹鞋 2023-04-17 原文

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. springboot定时任务 - 2

    如果您希望在Spring中启用定时任务功能,则需要在主类上添加 @EnableScheduling 注解。这样Spring才会扫描 @Scheduled 注解并执行定时任务。在大多数情况下,只需要在主类上添加 @EnableScheduling 注解即可,不需要在Service层或其他类中再次添加。以下是一个示例,演示如何在SpringBoot中启用定时任务功能:@SpringBootApplication@EnableSchedulingpublicclassApplication{publicstaticvoidmain(String[]args){SpringApplication.ru

  2. 基于SpringBoot的线上日志阅读器 - 2

    软件特点部署后能通过浏览器查看线上日志。支持Linux、Windows服务器。采用随机读取的方式,支持大文件的读取。支持实时打印新增的日志(类终端)。支持日志搜索。使用手册基本页面配置路径配置日志所在的目录,配置后按回车键生效,下拉框选择日志名称。选择日志后点击生效,即可加载日志。windows路径E:\java\project\log-view\logslinux路径/usr/local/XX历史模式历史模式下,不会读取新增的日志。针对历史文件可以分页读取,配置分页大小、跳转。历史模式下,支持根据关键词搜索。目前搜索引擎使用的是jdk自带类库,搜索速度相对较低,优点是比较简单。2G日志全文搜

  3. springboot使用validator进行参数校验 - 2

    1.依赖导入org.springframework.bootspring-boot-starter-weborg.springframework.bootspring-boot-starter-validation2.validation常用注解@Null被注释的元素必须为null@NotNull被注释的元素不能为null,可以为空字符串@AssertTrue被注释的元素必须为true@AssertFalse被注释的元素必须为false@Min(value)被注释的元素必须是一个数字,其值必须大于等于指定的最小值@Max(value)被注释的元素必须是一个数字,其值必须小于等于指定的最大值@D

  4. 停车系统源码-基于springboot+uniapp开源项目 - 2

    Iparking停车收费管理系统-可商用介绍Iparking是一款基于springBoot的停车收费管理系统,支持封闭车场和路边车场,支持微信支付宝多种支付渠道,支持多种硬件,涵盖了停车场管理系统的所有基础功能。技术栈Springboot,MybatisPlus,Beetl,Mysql,Redis,RabbitMQ,UniApp功能云端功能序号模块功能描述1系统管理菜单管理配置系统菜单2系统管理组织管理管理组织机构3系统管理角色管理配置系统角色,包含数据权限和功能权限配置4系统管理用户管理管理后台用户5系统管理租户管理多租户管理6系统管理公众号配置租户公众号配置7系统管理操作日志审计日志8系统

  5. 【uniapp】uni.request请求跨域问题解决方案 - 2

    例如,运行H5页面,请求一个地址资源,如果不是本站地址,浏览器就会报跨域错误,这样访问受限问题呈现例如,项目代码里是这样写的,运行H5测试uni.request({ url:'https://gitcode.net/zs1028/stat...ouces_2023/-/...', success(res){ console.log(res) }, fail(err){ console.error(err) }})因为https://gitcode.net不是本站地址,根据浏览器同源策略,是会报跨域错误,解决步骤打开项目的manifest.json文件,以源码视图查看,添加以下代码{ //.

  6. 7nm+跨域计算+极致性价比,这家芯片厂商助攻车企「降本增效」 - 2

    汽车芯片赛道的「卷」,或许超出了所有人的预期。对于单纯TOPS算力的比拼,已经翻篇,如何让车企有的用,用得上,还要用得好,已经是新风向。实际上,在汽车智能化刚刚开始的2018年,彼时类似斑马智行这样的车机系统仅仅是从软件层面改变传统座舱的人机交互体验(从功能机到智能机)。而类似Mobileye这样的ADAS视觉感知系统方案(EyeQ5之前),也仅仅是辅助驾驶的入门级。在高工智能汽车研究院看来,汽车芯片赛道经历了几个发展周期,1.0时代(以2020年上车的高通8155为代表),智能座舱进入硬件变革节点;2.0时代(以2021年上车的英伟达Orin为代表),智能驾驶进入硬件变革节点。而3.0时代,

  7. 优化大数据量查询方案——SpringBoot(Cloud)整合ES - 2

    一、Elasticsearch简介实际业务场景中,多端的查询功能都有很大的优化空间。常见的处理方式有:建索引、建物化视图简化查询逻辑、DB层之上建立缓存、分页…然而随着业务数据量的不断增多,总有那么一张表或一个业务,是无法通过常规的处理方式来缩短查询时间的。在查询功能优化上,作为开发人员应该站在公司的角度,本着优化客户体验的目的去寻找解决方案。本人有幸做过Tomcat整合solr,今天一起研究一下当前比较火热的Elasticsearch搜索引擎。Elasticsearch是一个非常强大的搜索引擎。它目前被广泛地使用于各个IT公司。Elasticsearch是由Elastic公司创建。它的代码位

  8. javascript - 为什么有些跨域 JSON 请求会失败,而有些则不会? - 2

    我在理解JSON的安全性方面有点困难,因为通常理论上不应该起作用的事情看起来确实有效。AFAIK,从驻留在域A的页面上的脚本调用,不应该能够从域B接收数据。但是在下面的代码中,对一个外部域的调用失败,而另一个通过。并且两者都不是打包的JSON调用(jsonp)。这是为什么?难道不应该禁止两者都通过浏览器安全检查吗?我在Chrome和Firefox中得到了相同的结果。如果我在dropbox.com上托管以下html页面,Chrome会给我这个错误消息:XMLHttpRequestcannotloadhttp://www.odinfond.no/rest/fund/calc/fundRet

  9. javascript - Firefox 中使用 xhr、客户端证书的跨域 SSL 握手失败 - 2

    设置如下:Firefox(3.x和4b),具有正确设置和有效的证书,包括客户端证书。带有XMLHttpRequest()类型AJAX调用的网页到不同的子域。所述子域中的自定义Web服务器接受请求,并以宽容的Access-Control-Allow-Origin响应header和要求客户验证。问题是Firefox突然中止了请求(好吧,这就是它在firebug中所说的)。使用openssls_server运行设置而是暗示Firefox实际上甚至不发送客户端证书:140727260153512:error:140890C7:SSLroutines:SSL3_GET_CLIENT_CERTIF

  10. javascript - 具有同级子域的跨域 JavaScript 代码 - 2

    我有两个网络应用程序设置:david.example.com和john.example.com大卫为约翰打开了一个新窗口:window.open('john.example.com');John现在想在David上设置一个输入元素:$("#input",window.opener.document).val("HelloDavid.");我的问题是,由于跨域脚本安全性,这在大多数现代浏览器上不起作用。我还尝试将document.domain设置为David和John上的不同域组合,但没有成功。唯一有效的情况是John在example.com上并且两者都将document.domain设

随机推荐