前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Springboot处理跨域请求

Springboot处理跨域请求

原创
作者头像
小唐同学.
修改2022-03-15 14:37:11
2.3K1
修改2022-03-15 14:37:11
举报
文章被收录于专栏:CMS建站教程

一、跨域背景

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://cloud.tencent.com。

二.解决方案

2.1 在Controller上使用@CrossOrigin注解

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

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

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

代码语言:javascript
复制
@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 {     } }

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、跨域背景
    • 1.1 什么是跨域?
      • 1.2 Cors是什么?
        • 2.1 在Controller上使用@CrossOrigin注解
        • 2.2 过滤器实现 通过实现Fiter接口在请求中添加一些Header来解决跨域的问题
    • 二.解决方案
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档