SpringBoot不同服务间配置跨域请求

SpringBoot不同服务间配置跨域请求

跨域

浏览器同源策略的影响,不是同源的脚本不能操作其他源下面的对象。想要操作另一个源下的对象就需要跨域。 在同源策略的限制下,非同源的网站之间不能发送 AJAX 请求。

一:全局配置
在这里插入图片描述

package com.song.songvue.config;
 
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 
/**
 *  Java编码定义
 */
@Configuration
public class MyWebConfig implements WebMvcConfigurer{
 
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry
                .addResourceHandler("/static/**")
                .addResourceLocations("classpath:/static/");
    }
 
    /**
     * 添加全局的配置 允许跨域请求
     */
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/testCors/**")
                .allowedHeaders("*")
                .allowedMethods("*")
                .maxAge(1800)
                .allowedOrigins("http://localhost:8090");
    }
}

二:方法配置
在这里插入图片描述

package com.song.songvue.test;
 
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
 
 
/**
 * 测试CORS 跨域请求
 */
@RestController
@RequestMapping("/testCors")
public class TestCors {
 
    /**
     * @CrossOrigin
     *    value 表示支持的域
     *    maxAge 表示探测请求的有效期 1800秒
     *    allowedHeaders : *  表示所有的请求头都被允许
     */
    @PostMapping("/getData")
    @CrossOrigin(value = "http://localhost:8090", maxAge = 1800, allowedHeaders = "*")
    public String addBook(String name) {
        return "server: " + name;
    }
 
    @DeleteMapping("/{id}")
    @CrossOrigin(value = "http://localhost:8090", maxAge = 1800, allowedHeaders = "*")
    public String deleteBookById(@PathVariable String id) {
        return id;
    }
 
}

三、Spring Boot 配置 CORS四种方式

a:方法上配置跨域:可以在方法上添加 @CrossOrigin 注解

@CrossOrigin(origins = {"http://localhost:9000", "null"})
@RequestMapping(value = "/test", method = RequestMethod.GET)
public String greetings() {
    return "{\"project\":\"just a test\"}";
}

b:类上配置跨域:可以在类上添加 @CrossOrigin 注解

@CrossOrigin(origins = {"http://localhost:9000", "null"})
@RestController
@SpringBootApplication
public class SpringBootCorsTestApplication {
    
}

c:如果想添加全局配置,则需要添加一个配置类 :

@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("*")
                .allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE")
                .maxAge(3600)
                .allowCredentials(true);
    }
}

d:通过添加 Filter 的方式,配置 CORS 规则,并手动指定对哪些接口有效。

@Bean
public FilterRegistrationBean corsFilter() {
    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    CorsConfiguration config = new CorsConfiguration();
    config.setAllowCredentials(true);	config.addAllowedOrigin("http://localhost:9000");
    config.addAllowedOrigin("null");
    config.addAllowedHeader("*");
    config.addAllowedMethod("*");
    source.registerCorsConfiguration("/**", config); // CORS 配置对所有接口都有效
    FilterRegistrationBean bean = newFilterRegistrationBean(new CorsFilter(source));
    bean.setOrder(0);
    return bean;
}

原理參考

https://www.cnblogs.com/yuansc/p/9076604.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要使用FeignClient调用另外一个服务,首先需要在配置文件中添加服务的URL地址。在配置文件中添加如下配置: ``` goodsUrl=http://dev.iot.com:8200 ``` 然后,在需要调用服务的类中使用@FeignClient注解来获取服务。例如,在服务A中添加服务B的接口,可以在服务A的启动类上添加@EnableFeignClients注解,使得该服务支持FeignClients功能。示例代码如下: ```java @EnableFeignClients @SpringBootApplication(scanBasePackages={"com.iot.shcs","com.iot.pwfm"}) @EnableScheduling @EnableTransactionManagement @MapperScan({"com.iot.pwfm.context.dao","com.iot.pwfm.context.*.dao"}) public class WebsiteApplication { public static void main(String\[\] args) { SpringApplication.run(WebsiteApplication.class, args); } } ``` 在FeignClient中,可以使用类似SpringMVC的Controller的方式来调用HTTP API,不需要手动拼接URL和参数。Feign会帮助我们隐藏Rest请求的细节。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *2* [【Java用法】微服务的相互调用方式之一,通过FeignClient客户端调用其他微服务的方法](https://blog.csdn.net/weixin_44299027/article/details/108729875)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [springcloud关于feign的使用(一个服务通过feign调用另外一个服务)](https://blog.csdn.net/Zhumory/article/details/115251149)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值