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

返回新的CorsFilter(全局跨域)

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

@Configuration
public class GlobalCorsConfig {
@Bean
public CorsFilter corsFilter() {
//1.添加CORS配置信息
CorsConfiguration config = new CorsConfiguration();
//放行哪些原始域
config.addAllowedOrigin("*");
//是否发送Cookie信息
config.setAllowCredentials(true);
//放行哪些原始域(请求方式)
config.addAllowedMethod("*");
//放行哪些原始域(头部信息)
config.addAllowedHeader("*");
//暴露哪些头部信息(因为跨域访问默认不能获取全部头部信息)
config.addExposedHeader("*"); //2.添加映射路径
UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource();
configSource.registerCorsConfiguration("/**", config); //3.返回新的CorsFilter.
return new CorsFilter(configSource);
}
}

使用注解(局部跨域)

在方法上(@RequestMapping)使用注解 @CrossOrigin

@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;
}
}

最新文章

  1. 混合框架中Oracle数据库的还原处理操作
  2. Java反射机制
  3. jQuery基本操作
  4. JavaWeb学习笔记——第一个JSP文件
  5. 登录到mysql查看binlog日志
  6. Linux进程内存分析pmap命令(转)
  7. div+css 定位浅析
  8. Servlet的一些细节(1)
  9. sdaf
  10. [Boost基础]并发编程——asio网络库——同步socket处理
  11. 【python】入门:打印字符串、简单计算
  12. 【WebGL】《WebGL编程指南》读书笔记——第4章
  13. WEB消息推送-原理篇
  14. Unity3d外包公司|UE4外包公司:谷歌首款Daydream VR设备上手
  15. MySQL千万级数据库查询怎么提高查询效率
  16. mumu模拟器安装xposed--如何在android模拟器上进行root
  17. Emacs 中使用中文插件 eim
  18. pickle详解
  19. 001 LRU-缓存淘汰算法
  20. ubuntu16.04 LTS把下载源改为阿里云的源

热门文章

  1. Windows 64 位 mysql 5.7以上版本包解压中没有data目录和my-default.ini和my.ini文件以及服务无法启动的解决办法以及修改初始密码的方法
  2. HDU Queuing(递推+矩阵快速幂)
  3. TypeScript——基本类型
  4. SpringBoot安全篇Ⅵ --- 整合Spring Security
  5. Kotlin Android项目静态检查工具的使用
  6. leetcode水题题解
  7. WTL使用双缓冲避免重绘闪烁
  8. 视觉slam十四讲ch5 joinMap.cpp 代码注释(笔记版)
  9. 理解POP、OOP、AOP编程
  10. Go语言实现:【剑指offer】左旋转字符串