springboot后端跨域的N种方法

本文详细介绍了在SpringBoot中处理后端跨域的四种方法:全局跨域配置、局部跨域注解、手动设置响应头以及通过Nginx代理配置跨域。通过这些方式,开发者可以灵活地解决前后端跨域访问的问题,确保不同源的客户端能够顺利地与SpringBoot应用进行交互。
摘要由CSDN通过智能技术生成

springboot后端跨域的N种方法

简单来说,CORS是一种访问机制,英文全称是Cross-Origin Resource Sharing,即我们常说的跨域资源共享,通过在服务器端设置响应头,把发起跨域的原始域名添加到Access-Control-Allow-Origin 即可。

创建新的CORSConfiguration(全局跨域)

在任意配置类,返回一个新的CorsFilter Bean,并添加映射路径和具体的CORS配置信息。

@Configuration
public class CORSConfiguration extends WebMvcConfigurationSupport {

        /**
         * 这里主要为了解决跨域问题,所以重写addCorsMappings方法
         */
        @Override
        protected void addCorsMappings(CorsRegistry registry) {
            registry.addMapping("/**")
                    .allowedOrigins("*")
                    .allowedMethods("GET", "HEAD", "POST","PUT", "DELETE", "OPTIONS")
                    .allowedHeaders("*")
                    .exposedHeaders("access-control-allow-headers",
                            "access-control-allow-methods",
                            "access-control-allow-origin",
                            "access-control-max-age",
                            "X-Frame-Options")
                    .allowCredentials(false).maxAge(3600);
            super.addCorsMappings(registry);
        }
}

使用注解(局部跨域)

在方法上(@RequestMapping)使用注解 @CrossOrigin
Copy@RequestMapping("/hello")
@ResponseBody
@CrossOrigin("http://localhost:8080") 
public String index(){
    return "Hello World";
}

在控制器(@Controller)上使用注解 @CrossOrigin

@Controller
@CrossOrigin(origins = "http://domain.com", maxAge = 3600)
public class AccountController {

    @RequestMapping("/hello")
    @ResponseBody
    public String index(){
        return "Hello World";
    }
}

手工设置响应头(局部跨域)

使用HttpServletResponse对象添加响应头(Access-Control-Allow-Origin)来授权原始域,这里Origin的值也可以设置为”*” ,表示全部放行。

@RequestMapping("/hello")
@ResponseBody
public String index(HttpServletResponse response){
    response.addHeader("Access-Control-Allow-Origin", "*");
    return "Hello World";
}

Nginx配置跨域

upstream server {
        server 127.0.0.1:8091;
}
server {
        listen 80;
        server_name domain.com;

        location ^~/api {
                //添加跨域请求头
                proxy_set_header Access-Control-Allow-Origin *;
                proxy_set_header Access-Control-Allow-Methods *;
                proxy_set_header Access-Control-Allow-Headers *;

                if ($request_method = 'OPTIONS') {
                        return 204;
                }
                rewrite ^/api/(.+?)$ /$1 break;
                proxy_pass http://server;
        }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值