Springboot处理跨域请求

举报
小唐同学 发表于 2022/05/20 15:26:13 2022/05/20
【摘要】 CORS全称为Cross Origin Resource Sharing(跨域资源共享), 每一个页面需要返回一个名为Access-Control-Allow-Origin的http头来允许外域的站点访问,你可以仅仅暴露有限的资源和有限的外域站点访问。

一、跨域背景

1.1 什么是跨域?

Url的一般格式: 协议 + 域名(子域名 + 主域名) + 端口号 + 资源地址 只要协议,子域名,主域名,端口号这四项组成部分中有一项不同,就可以认为是不同的域,不同的域之间互相访问资源,就被称之为跨域。

1.2 Cors是什么?

  • CORS全称为Cross Origin Resource Sharing(跨域资源共享), 每一个页面需要返回一个名为Access-Control-Allow-Origin的http头来允许外域的站点访问,你可以仅仅暴露有限的资源和有限的外域站点访问。
  • 我们可以理解为:如果一个请求需要允许跨域访问,则需要在http头中设置Access-Control-Allow-Origin来决定需要允许哪些站点来访问。如假设需要允https://cloud.tencent.com这个站点的请求跨域,则可以设置: Access-Control-Allow-Origin:https://bbs.huaweicloud.com

二.解决方案

2.1 在Controller上使用@CrossOrigin注解

该类下的所有接口都可以通过跨域访问

@RequestMapping("/demo2") @RestController //@CrossOrigin //所有域名均可访问该类下所有接口
 @CrossOrigin("https://bbs.huaweicloud.com") // 只有指定域名可以访问该类下所有接口 
 public class CorsTest2Controller {   
     @GetMapping("/sayHello")    
      public String sayHello() {    
           return "hello world --- 2";  
              }
               } 

2.2 过滤器实现 通过实现Fiter接口在请求中添加一些Header来解决跨域的问题

@Component public class CorsFilter implements Filter {    
   @Override   
     public void doFilter(ServletRequest request, ServletResponzse response, FilterChain chain)throws IOException, ServletException {       
       HttpServletResponse res = (HttpServletResponse) response;       
       res.addHeader("Access-Control-Allow-Credentials", "true");       
       res.addHeader("Access-Control-Allow-Origin", "*");//*表示允许所有域名    
       res.addHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT");    
       res.addHeader("Access-Control-Allow-Headers", "Content-Type,X-CAF-Authorization-Token,sessionToken,X-TOKEN");//允许header中哪些参数跨域    
            if (((HttpServletRequest) request).getMethod().equals("OPTIONS")) {       
       response.getWriter().println("ok");     
      return;      
         }     
           chain.doFilter(request, response);   
             }     
             @Override     
             public void destroy() {     }     
             @Override     
             public void init(FilterConfig filterConfig) throws ServletException {     } }
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。