文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

分享后端解决跨域问题的三种方案

2023-09-01 15:10

关注

跨源资源共享(CORS——Cross-Origin Resource Sharing,跨源资源共享,或通俗地译为跨域资源共享)是一种基于 HTTP 头的机制,该机制通过允许服务器标示除了它自己以外的其它源(域、协议或端口),使得浏览器允许这些源访问加载自己的资源。跨源资源共享还通过一种机制来检查服务器是否会允许要发送的真实请求,该机制通过浏览器发起一个到服务器托管的跨源资源的“预检”请求。在预检中,浏览器发送的头中标示有 HTTP 方法和真实请求中会用到的头。

跨域问题所产生的原因是浏览器的“同源策略”所导致的。什么是同源策略呢,就是浏览器规定了,我当前页面和请求页面的 1网络协议、2主机域名、3端口,这三部分必须保证一模一样才行。如下图:

这也主要是浏览器为了保证用户上网的基本安全需求而设置的。

1.为了防止恶意网页可以获取其他网站的本地数据。

2.为了防止恶意网站iframe其他网站的时候,获取数据。

3.为了防止恶意网站在自已网站有访问其他网站的权利,以免通过cookie免登,拿到数据。

跨域的解决方案有很多种,前后端都有。这里主要介绍下我所知道的三种方案,并配以代码展示。

1.在后端被访问代码的方法上加注解@CrossOrign。这个注解是spring-web中的注解,我们只需在方法上面加注之后,就会解决CORS问题。例如:

    @GetMapping("getInfo")    @CrossOrigin    public AjaxResult getInfo()    {        SysUser user = SecurityUtils.getLoginUser().getUser();        // 角色集合        Set roles = permissionService.getRolePermission(user);        // 权限集合        Set permissions = permissionService.getMenuPermission(user);        AjaxResult ajax = AjaxResult.success();        ajax.put("user", user);        ajax.put("roles", roles);        ajax.put("permissions", permissions);        return ajax;    }

但是,后端有很多被访问的方法,我们不能在每个方法上面都加上这个注解,代码冗余。所以就有了第二种方法,我们可以添加一个过滤器,来解决CORS问题,代码如下:

@Configurationpublic class CORSFilter {    @Bean    public CorsFilter corsFilter(){        CorsConfiguration corsConfiguration = new CorsConfiguration();        corsConfiguration.addAllowedHeader("*");        corsConfiguration.addAllowedOrigin("*");        corsConfiguration.addAllowedMethod("*");        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();        source.registerCorsConfiguration("/**",corsConfiguration);        return new CorsFilter(source);    }}

还有一种解决方法,我们可以通过实现接口并重写方法来解决跨域问题,代码如下:

@Configurationpublic class CORSConfiguration implements WebMvcConfigurer {    @Override    public void addCorsMappings(CorsRegistry registry) {        registry.addMapping("/**")                .allowedOriginPatterns("*")                .allowedMethods("GET","POST","PUT","HEAD")                .allowCredentials(true)                .allowedHeaders("*")                .maxAge(3600);    }}

通过这三种方式,我们就可以解决CORS跨域问题。

来源地址:https://blog.csdn.net/Lee_92/article/details/129230088

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯