当前位置: 代码网 > it编程>编程语言>Java > Spring boot如何开启跨域配置

Spring boot如何开启跨域配置

2024年08月16日 Java 我要评论
spring boot开启跨域配置跨域(cross-origin)是指在互联网上的一个域下的文档或脚本尝试请求另一个域下的资源时,域名、协议或端口不同的这种情况。具体来说,如果一个网页试图通过脚本(如

spring boot开启跨域配置

跨域(cross-origin)是指在互联网上的一个域下的文档或脚本尝试请求另一个域下的资源时,域名、协议或端口不同的这种情况。

具体来说,如果一个网页试图通过脚本(如javascript)从不同源的服务器上请求数据,就会触发浏览器的同源策略限制,导致跨域问题。

同源策略(same-origin policy)是web浏览器的一个安全功能,它要求web浏览器仅允许执行来自同一站点的脚本访问该站点的资源。

这意味着,如果网页a尝试访问网页b的资源,且这两个网页的协议、域名或端口号中任何一个不相同,浏览器就会阻止这种访问,以防止恶意网站读取另一个网站的数据。

spring boot解决跨域问题

一、controller添加注解

在controller层添加@crossorigin就可以解决跨域问题

@restcontroller
@requestmapping("test")
@slf4j
@crossorigin
public class democontroller {

    @requestmapping("message")
    public string test(@requestbody message message) {
        log.info("{}", json.tojsonstring(message));
        return "test";
    }
}

二、全局配置

添加如下全局配置就可以统一配置跨域支持

@configuration
public class mvcconfig implements webmvcconfigurer {

    /**
     * 开启全局跨域配置
     * @param registry
     */
    @override
    public void addcorsmappings(corsregistry registry) {
        registry.addmapping("/**")
                .allowedoriginpatterns("*")
                .allowedmethods("post", "get", "put", "options", "delete")
                .maxage(3600)
                .allowcredentials(true);
    }

}

三、通过拦截器配置

通过如下拦截器配置,也可以支持跨域

public class corsinterceptor implements handlerinterceptor {

    @override
    public boolean prehandle(httpservletrequest request, httpservletresponse response, object handler) throws exception {

        //表示接受任意域名的请求,也可以指定域名
        response.setheader("access-control-allow-origin", request.getheader("origin"));

        //该字段可选,是个布尔值,表示是否可以携带cookie
        response.setheader("access-control-allow-credentials", "true");

        response.setheader("access-control-allow-methods", "get, head, post, put, patch, delete, options");

        response.setheader("access-control-allow-headers", "*");


        //这里可以不加,但是其他语言开发的话记得处理options请求
        /**
         * 非简单请求是对那种对服务器有特殊要求的请求,
         * 比如请求方式是put或者delete,或者content-type字段类型是application/json。
         * 都会在正式通信之前,增加一次http请求,称之为预检。浏览器会先询问服务器,当前网页所在域名是否在服务器的许可名单之中,
         * 服务器允许之后,浏览器会发出正式的xmlhttprequest请求
         */
        if(httpmethod.options.tostring().equals(request.getmethod())){
            return true;
        }

        return true;
    }

    @override
    public void posthandle(httpservletrequest request, httpservletresponse response, object handler, modelandview modelandview) throws exception {

    }

    @override
    public void aftercompletion(httpservletrequest request, httpservletresponse response, object handler, exception ex) throws exception {

    }
}

总结

spring boot解决跨域问题还是很方便的,遇到跨域问题,通过以上方式都可以实现解决

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com