Springboot 2.X 接口跨域问题解决方案-Cors配置

做小程序的时候,有个别的接口,需要提供给小程序服务以外的推广页使用,推广页域名与小程序后端服务接口域名产生了跨域问题,查了部分资料后,有两种解决方案。

首先说一下跨域问题的原因:

跨域是指:浏览器A服务器B获取的静态资源,包括Html、Css、Js,然后在Js中通过Ajax访问C服务器的静态资源或请求。即:浏览器A从B服务器拿的资源,资源中想访问服务器C的资源。

同源策略是指:浏览器A服务器B获取的静态资源,包括Html、Css、Js,为了用户安全,浏览器加了限制,其中的Js通过Ajax只能访问B服务器的静态资源或请求。即:浏览器A从哪拿的资源,那资源中就只能访问哪。

同源是指:同一个请求协议(如:Http或Https)、同一个Ip、同一个端口,3个全部相同,即为同源。

解决方案有很多,本文只记录cors的方案。

SpringBoot2.x配置Cors

SpringBoot2.x主要提供了两种方式来支持Cors,如下:

方式作用范围说明
@CrossOrigin注解一个Controller中全部接口或是其中一个特定的接口配置、定制特定的请求接口
WebMvcConfigurer对象全部接口适用于全局配置

第一种: 使用@CrossOrigin注解

代码实例

@RestController
@RequestMapping(value = "/api")
@CrossOrigin
public class UsersController{

    @Autowired
    private UsersService usersService;

    @PostMapping("userInfo/{openid}")
    @CrossOrigin
    public User getUserInfo(@PathVariable String openid) {
        return userService.get(openid);
    }
}

其中,@CrossOrigin注解可以使用以下参数

名称类型范围必填请求头字段
valueString数组类或方法Access-Control-Allow-Origin
originsString数组类或方法是,同value,可以二选一Access-Control-Allow-Origin
methodsString数组类或接口Access-Control-Allow-Methods
maxAgelong类或接口Access-Control-Max-Age
allowCredentialsString类或接口Access-Control-Allow-Credentials
allowedHeadersString数组类或接口Access-Control-Request-Headers
exposedHeadersString数组类或接口Access-Control-Expose-Headers
  • 备注说明
  1. value、origins属性:配置允许访问的源,如: http://anxminise.cc,*表示允许全部的域名
  2. methods属性:配置跨域请求支持的方式,如:GET、POST,且一次性返回全部支持的方式
  3. maxAge属性:配置预检请求的有效时间, 单位是秒,表示:在多长时间内,不需要发出第二次预检请求
  4. allowCredentials属性:配置是否允许发送Cookie,用于 凭证请求, 默认不发送cookie
  5. allowedHeaders属性:配置允许的自定义请求头,用于 预检请求
  6. exposedHeaders属性:配置响应的头信息, 在其中可以设置其他的头信息,不进行配置时, 默认可以获取到Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragma字段

第二种: 使用WebMvcConfigurer对象

代码实例

@Configuration
public class MyConfiguration {

    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurer() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/api/**")
                          .allowedOrigins("*")  
                          .allowCredentials(true)
                          .allowedMethods("GET", "POST", "DELETE", "PUT","PATCH")
                          .maxAge(3600);  
            }
        };
    }
}

其中,通过相应的方法实现跨域请求的配置

方法类方法名称必填请求头字段说明
CorsRegistryaddMapping无, 非Cors属性, 
属于SpringBoot配置
配置支持跨域的路径
CorsRegistrationallowedOriginsAccess-Control-Allow-Origin配置允许的源
CorsRegistrationallowedMethodsAccess-Control-Allow-Methods配置支持跨域请求的方法, 
如:GET、POST,一次性返回
CorsRegistrationmaxAgeAccess-Control-Max-Age配置预检请求的有效时间
CorsRegistrationallowCredentialsAccess-Control-Allow-Credentials配置是否允许发送Cookie, 用于 凭证请求
CorsRegistrationallowedHeadersAccess-Control-Request-Headers配置允许的自定义请求头, 用于 预检请求
CorsRegistrationexposedHeadersAccess-Control-Expose-Headers配置响应的头信息, 
在其中可以设置其他的头信息
  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Spring Boot后端解决跨域问题需要进行以下配置。 首先,我们需要在项目中创建一个跨域配置类,例如CorsConfig.java。在这个类中,我们可以使用@Configuraion注解来标记它是一个配置类,并使用@ConfiguraionProperties注解来指定配置的属性。 接下来,在配置类中,我们需要使用@Beane注解来注册一个CorsRegistration实例,并使用其allowedOrigins()方法来指定允许的源,即允许访问该接口的域名。例如,我们可以设置"*"来允许所有域名访问。 然后,我们可以使用allowedMethods()方法来指定允许的HTTP方法。默认情况下,GET、POST和HEAD方法是允许的,但我们也可以自定义允许的方法。 接下来,我们可以使用allowedHeaders()方法来指定允许的请求头。这样我们可以在请求中添加自定义的请求头,并在后端进行处理。 最后,我们可以使用allowCredentials()方法来设置是否允许发送凭证信息。如果需要在请求中发送凭证信息(例如:cookies、HTTP认证等),我们需要将其设置为true。 完成了以上配置后,我们可以在Spring Boot的主启动类上使用@Import注解来导入跨域配置类。这样就可以使我们的配置生效。 总而言之,通过以上配置,我们就可以解决Spring Boot后端的跨域问题。这样我们就可以在前后端分离的项目中实现跨域访问接口。 ### 回答2: 在Spring Boot后端解决跨域问题,可以通过配置文件进行设置。步骤如下: 1. 创建一个名为"application.properties"的配置文件。 2. 在该文件中,添加以下内容来配置跨域解决方案: ``` # 允许来自所有源的跨域访问 cors.allowed-origins=* # 允许的请求方法 cors.allowed-methods=GET, POST, PUT, DELETE # 允许的请求头部 cors.allowed-headers=Authorization,Content-Type # 是否允许发送cookie cors.allow-credentials=true # Max-Age设置为1小时 cors.max-age=3600 ``` 3. 保存并关闭配置文件。 4. 重新启动后端应用程序。 通过以上配置,允许来自所有源的跨域访问,并允许的请求方法包括GET、POST、PUT和DELETE。允许的请求头部包括Authorization和Content-Type,并允许发送cookie。Max-Age设置为1小时,即允许浏览器缓存跨域访问的响应结果。 注意:在具体应用场景中,我们也可以根据需求进行相应的调整和限制。 ### 回答3: 在Spring Boot后端应用中,我们可以通过配置文件来解决跨域请求的问题。 首先,我们需要在项目的资源文件夹中创建一个新的配置文件,命名为application.properties或application.yml,具体选择哪种格式取决于你的项目使用的是.properties还是.yml文件来进行配置。 接下来,我们需要在配置文件中添加如下配置: 对于application.properties格式的文件,可以添加以下内容: spring.mvc.cross-origin.allow-credentials=true spring.mvc.cross-origin.allowed-headers=* spring.mvc.cross-origin.allowed-methods=GET,POST,PUT,DELETE spring.mvc.cross-origin.allowed-origins=* 对于application.yml格式的文件,可以添加以下内容: spring: mvc: cross-origin: allow-credentials: true allowed-headers: "*" allowed-methods: GET,POST,PUT,DELETE allowed-origins: "*" 以上配置的含义是允许携带身份凭证(allow-credentials)、允许所有的请求头(allowed-headers)、允许的请求方法(allowed-methods)、允许的来源地址(allowed-origins)。 配置完成后,保存配置文件并重启后端应用,这样就完成了跨域请求的配置。现在,前端的跨域请求将被允许访问后端接口,从而实现解决跨域问题。 需要注意的是,实际部署时应根据具体的安全需求对跨域配置进行细化,并只允许必要的请求来源和请求方法,以确保系统的安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值