springboot如何实现前后端分离跨域访问

 更新时间:2023年12月15日 09:37:42   作者:古甲哈醒  
这篇文章主要介绍了springboot如何实现前后端分离跨域访问问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

在springboot项目中,前端html页面和后端api接口是分离的,实际项目部署的时候也是分开部署的。

这样由于IP不同或者端口不同,就存在跨域问题,导致html无法调用api。

为解决此问题,实际项目部署的时候一般有三种解决方案:

(1)使用Nginx反向代理

使用Nginx反向代理,根据访问路径进行拦截,如果是html则指向静态页,如果是api,则把请求跳转到api的访问地址。

一般这是大部分项目推荐使用的部署方式

具体Nginx配置如下:

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    #前端页面服务器
    server {
        #监听端口和域名
        listen       8080; 
        server_name  localhost;

        #添加头部信息
        proxy_set_header Cookie $http_cookie;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        
        #拦截api接口访问
        location /api/ {              
               proxy_pass http://localhost:8080/;  #注意:使用代理地址时末尾记得加上斜杠"/"。      
        }
        
        #拦截静态页html
        location / {
               root   html/www;  #注意:使用"/"拦截全路径的时候记得放在最后。
               index  index.html index.htm;  #index表示首页 
        }           
        
    }
}

(2)将api和html部署在同一个tomcat

由于跨域是IP和端口不同导致的,那么将html和api部署在同一个tomcat中,就不存在跨域问题。

只需将springboot项目打成war包和html部署在一就行,简单方便。

这种方式只适合小型项目,一般不推荐

(3)在springboot代码层面允许跨域

在springboot项目代码层面加入支持跨域配置,也可实现跨域访问。

这种方式适合开发调试阶段使用

一般都要求边开发边调试,我就是与前端人员进行同步开发调试,在代码层面开启跨域访问,开发调试起来非常方便。

springboot开启跨域支持非常简单,只需要在启动类中配置WebMvcConfigurer,并重写addCorsMappings方法即可。

@Configuration
public class MyMvcConfig {

    @Bean
    public WebMvcConfigurer  webMvcConfigurer(){
        return new WebMvcConfigurer() {

            //配置跨域
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/**")     //允许的路径
                        .allowedMethods("*")     //允许的方法
                        .allowedOrigins("*")       //允许的网站
                        .allowedHeaders("*")     //允许的请求头
                        .allowCredentials(true)
                        .maxAge(3600);
            }
}

总结

以上三种方式均可解决跨域问题。

  • 方法1是推荐的部署方式;
  • 方法2是适合小项目;
  • 方法3是推荐开发调试阶段使用

好了,这些仅为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Spring Boot实现功能的统一详解

    Spring Boot实现功能的统一详解

    这篇文章主要介绍了Spring Boot统一功能的处理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • 关于ThreadLocal对request和response的用法说明

    关于ThreadLocal对request和response的用法说明

    这篇文章主要介绍了关于ThreadLocal对request和response的用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • 实例讲解MyBatis如何防止SQL注入

    实例讲解MyBatis如何防止SQL注入

    这篇文章通过实例代码介绍MyBatis如何防止SQL注入,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-12-12
  • Synchronized 和 ReentrantLock 的实现原理及区别

    Synchronized 和 ReentrantLock 的实现原理及区别

    这篇文章主要介绍了Synchronized 和 ReentrantLock 的实现原理及区别,文章为荣啊主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • JPA 通过Specification如何实现复杂查询

    JPA 通过Specification如何实现复杂查询

    这篇文章主要介绍了JPA 通过Specification如何实现复杂查询,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • Java数据结构之常见排序算法(上)

    Java数据结构之常见排序算法(上)

    这篇文章主要介绍了Java数据结构之常见排序算法,本文章是汇总篇,且对每个排序都进行了说明,可以很好的理清思路,对排序算法有个总体的框架,需要的朋友可以参考下
    2023-01-01
  • Java 内存分配深入理解

    Java 内存分配深入理解

    这篇文章主要介绍了Java 内存分配深入理解的相关资料,需要的朋友可以参考下
    2017-03-03
  • JavaAgent的简单例子

    JavaAgent的简单例子

    这篇文章主要介绍了JavaAgent的简单例子,对JavaAgent感兴趣的同学,可以参考下
    2021-04-04
  • Java 装箱与拆箱详解及实例代码

    Java 装箱与拆箱详解及实例代码

    这篇文章主要介绍了Java 装箱与拆箱详解及实例代码的相关资料,这里对java 的装箱及拆箱进行了基本概念详解及简单使用,需要的朋友可以参考下
    2017-01-01
  • Spring Boot 2.0多数据源配置方法实例详解

    Spring Boot 2.0多数据源配置方法实例详解

    这篇文章主要介绍了Spring Boot 2.0多数据源配置方法实例详解,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-09-09

最新评论