踩坑录- Spring Boot - CORS 跨域 - 浏览器同源策略
1、解决办法,创建一个过滤器,处理所有response响应头
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebFilter(filterName="ServletFilter",urlPatterns="/*")
public class ServletFilter implements Filter{
	@Override
	public void destroy() {
		// TODO Auto-generated method stub
	}
	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		// TODO Auto-generated method stub
		//before
		HttpServletResponse res = (HttpServletResponse) response;
		res.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, OPTIONS, DELETE"); // 允许所有请求类型
		res.setHeader("Access-Control-Max-Age", "3600");   // 本次预检请求的有效期,单位为秒
		res.setHeader("Access-Control-Allow-Origin",((HttpServletRequest)request).getHeader("Origin")); // 获取当前请求地址,允许当前请求地址
		res.setHeader("Access-Control-Allow-Headers","authorization,Origin,No-Cache,X-Requested-With,If-Modified-Since,Pragma,Last-Modified,Cache-Control,Expires,Content-Type,X-E4M-With,userId,token,Access-Control-Allow-Headers,Access-Control-Allow-Origin"); // 允许请求头KEY
		//after
	}
	@Override
	public void init(FilterConfig arg0) throws ServletException {
		// TODO Auto-generated method stub
	}
}
2、问题描述-XmlHttpRequest同源策略
禁止使用XHR对象向不同源的服务器地址发起HTTP请求;
3、请求头详解
Access-Control-Allow-Methods
允许请求类型
Access-Control-Max-Age
设置本次预检请求的有效期,单位为秒。第一次是浏览器使用OPTIONS方法发起一个预检请求,第二次才是真正的异步请求,第一次的预检请求获知服务器是否允许该跨域请求:如果允许,才发起第二次真实的请求;
Access-Control-Allow-Origin
允许当前请求地址。设置该头值为“*”会导致,除Chrome外的所有浏览器请求失败(如下图);所以获取当前请求地址,并设置值为当前请求地址即可。

Access-Control-Allow-Headers
允许请求头KEY。设置该头值为“*”会导致,除Chrome外的所有浏览器请求失败;所以尽可能的将,请求头KEY都列举出来,或遇见一个请求头设置一个KEY,或设置自己需要的请求头KEY;
踩坑录- Spring Boot - CORS 跨域 - 浏览器同源策略的更多相关文章
- Spring Boot 允许跨域设置失败的问题深究
		
在公司开发过程中,一个前后端分离的项目遇见了跨域的问题. 前端控制台报错:No 'Access-Control-Allow-Origin' header is present on the reque ...
 - spring MVC cors跨域实现源码解析
		
# spring MVC cors跨域实现源码解析 > 名词解释:跨域资源共享(Cross-Origin Resource Sharing) 简单说就是只要协议.IP.http方法任意一个不同就 ...
 - spring MVC cors跨域实现源码解析 CorsConfiguration  UrlBasedCorsConfigurationSource
		
spring MVC cors跨域实现源码解析 spring MVC cors跨域实现源码解析 名词解释:跨域资源共享(Cross-Origin Resource Sharing) 简单说就是只要协议 ...
 - 09. ajax跨域问题,同源策略
		
有三个标签允许跨域加载资源 <img src=“”/> <link href=“”/> <script src=“”> 可以做防盗链图片功能 前端使用jsonp ...
 - Ajax跨域、Json跨域、Socket跨域和Canvas跨域等同源策略限制的解决方法
		
同源是指同样的协议.域名.port,三者都同样才属于同域.不符合上述定义的请求,则称为跨域. 相信每一个开发者都曾遇到过跨域请求的情况,尽管情况不一样,但问题的本质都能够归为浏览器出于安全考虑下的同源 ...
 - Spring Boot实现跨域(转)
		
一.方法: 服务端设置Respone Header头中Access-Control-Allow-Origin 配合前台使用jsonp 继承WebMvcConfigurerAdapter 添加配置类 二 ...
 - [CORS:跨域资源共享] 同源策略与JSONP
		
Web API普遍采用面向资源的REST架构,将浏览器最终执行上下文的JavaScript应用Web API消费者的重要组成部分."同源策略"限制了JavaScript的跨站点调用 ...
 - Django之跨域请求同源策略
		
同源策略: 首先基于安全的原因,浏览器是存在同源策略这个机制的,同源策略阻止从一个源加载的文档或脚本获取或设置另一个源加载的文档的属性. 而如果我们要跳过这个策略,也就是说非要跨域请求,那么就需要通过 ...
 - 从跨域与同源策略谈CSRF防御与绕过
		
之前偶然看到群里有小伙汁问这个token相关的问题,当时我酝酿了一下子,没想好怎么总结,今天来说一下 CSRF在过去还属于OWASP TOP10 ,现在已经不是了(补充一点:关于OWASP API 请 ...
 
随机推荐
- 新萝卜家园Ghost版Win10系统X32极速装机版2015年4月
			
来自:系统妈,系统下载地址:http://www.xitongma.com/windows10/2015-03-30/6638.html 新萝卜家园Ghost Win10 X32 10041电脑城极速 ...
 - CentOS7 Install Shipyard
			
# 采集木jj 原文:http://www.cnblogs.com/caoguo/p/5735189.html # CentOS7 Install Shipyard# yum install dock ...
 - 迅为4418开发板Qt移植移动4G模块第二部分
			
第一部分: http://www.cnblogs.com/topeet/p/6509248.html 第二部分: 5.ping不通域名一般是DNS没有设置对造成的.在etc下有一个文件resolv.c ...
 - Android(java)学习笔记199:JNI之JNI概念
			
1. JNI是什么? java native interface (java本机接口) 比如方法声明: public final native Class<?> getClass(): ...
 - ubuntu18.04 frpc安装与自动启动
			
1. 下载, 解压 export FRP_VERSION='0.25.3' wget --no-check-certificate https://github.com/fatedier/frp/re ...
 - java线程池,信号量使用demo
			
直接上代码 package org.jimmy.threadtest20181121; import java.util.concurrent.LinkedBlockingQueue; import ...
 - Mysql使用导出导入数据库
			
要在两台不同的电脑上进行开发,数据库需要统一,由于自己第一次完整的设计表结构,因此多次更改表结构,造成了很多不必要的麻烦, 需要将数据库导出成sql脚本: 命令行下具体用法如下: mysqldump ...
 - redis新特性
			
摘自<redis 4.xcookbook> 从实例重启同步] 故障切换同步] 4.0之前从实例主键过期bug redis4新特性 Memory Command Lazy Free PSYN ...
 - C# defult关键字
			
一.问题 今天写一个函数提示用defult,因为第一次用记录一下 public static T GetConfig<T>(string strConfig) { try { return ...
 - [实现] 利用 Seq2Seq 预测句子后续字词 (Pytorch)
			
最近有个任务:利用 RNN 进行句子补全,即给定一个不完整的句子,预测其后续的字词.本文使用了 Seq2Seq 模型,输入为5个中文字词,输出为一个中文字词. 目录 关于RNN 语料预处理 搭建数据集 ...