版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SpringBoot中实现跨域的5种方式一、为什么会出现跨域问题出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。所谓同源(即指在同一个域)就是两个页面具有相同的协议(protocol),主机(host)和端口号(port)二、什么是跨域当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域三、非同源限制【1】无法读取非同源网页的Cookie、LocalStorage和IndexedDB【2】无法接触非同源网页的DOM【3】无法向非同源地址发送AJAX请求四、java后端实现CORS跨域请求的方式对于CORS的跨域请求,主要有以下几种方式可供选择:返回新的CorsFilter重写WebMvcConfigurer使用注解@CrossOrigin手动设置响应头(HttpServletResponse)自定webfilter实现跨域注意:CorFilter/WebMvConfigurer/@CrossOrigin需要SpringMVC4.2以上版本才支持,对应springBoot1.3版本以上上面前两种方式属于全局CORS配置,后两种属于局部CORS配置。如果使用了局部跨域是会覆盖全局跨域的规则,所以可以通过
@CrossOrigin注解来进行细粒度更高的跨域资源控制。其实无论哪种方案,最终目的都是修改响应头,向响应头中添加浏览器所要求的数据,进而实现跨域。1.返回新的CorsFilter(全局跨域)在任意配置类,返回一个新的CorsFIlterBean,并添加映射路径和具体的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
corsConfigurationSource
=
new
UrlBasedCorsConfigurationSource();
corsConfigurationSource.registerCorsConfiguration("/**",config);
//3.
返回新的CorsFilter
return
new
CorsFilter(corsConfigurationSource);
}
}2.重写WebMvcConfigurer(全局跨域)@Configuration
public
class
CorsConfig
implements
WebMvcConfigurer
{
@Override
public
void
addCorsMappings(CorsRegistry
registry)
{
registry.addMapping("/**")
//是否发送Cookie
.allowCredentials(true)
//放行哪些原始域
.allowedOrigins("*")
.allowedMethods(new
String[]{"GET",
"POST",
"PUT",
"DELETE"})
.allowedHeaders("*")
.exposedHeaders("*");
}
}3.使用注解(局部跨域)在控制器(类上)上使用注解@CrossOrigin:,表示该类的所有方法允许跨域。搜索公众号后端架构师后台回复“架构整洁”,获取一份惊喜礼包。@RestController
@CrossOrigin(origins
=
"*")
public
class
HelloController
{
@RequestMapping("/hello")
public
String
hello()
{
return
"hello
world";
}
}
在方法上使用注解@CrossOrigin:@RequestMapping("/hello")
@CrossOrigin(origins
=
"*")
//@CrossOrigin(value
=
"http://localhost:8081")
//指定具体ip允许跨域
public
String
hello()
{
return
"hello
world";
}4.手动设置响应头(局部跨域)使用HttpServletResponse对象添加响应头(Access-Control-Allow-Origin)来授权原始域,这里Origin的值也可以设置为“*”,表示全部放行。@RequestMapping("/index")
public
String
index(HttpServletResponse
response)
{
response.addHeader("Access-Allow-Control-Origin","*");
return
"index";
}5.使用自定义filter实现跨域首先编写一个过滤器,可以起名字为MyCorsFilter.javapackage
com.mesnac.aop;
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.http.HttpServletResponse;
import
org.springframework.stereotype.Component;
@Component
public
class
MyCorsFilter
implements
Filter
{
public
void
doFilter(ServletRequest
req,
ServletResponse
res,
FilterChain
chain)
throws
IOException,
ServletException
{
HttpServletResponse
response
=
(HttpServletResponse)
res;
response.setHeader("Access-Control-Allow-Origin",
"*");
response.setHeader("Access-Control-Allow-Methods",
"POST,
GET,
OPTIONS,
DELETE");
response.setHeader("Access-Control-Max-Age",
"3600");
response.setHeader("Access-Control-Allow-Headers",
"x-requested-with,content-type");
chain.doFilter(req,
res);
}
public
void
init(FilterConfig
filterConfig)
{}
public
void
destroy()
{}
}在web.xml中配置这个过滤器,使其生效
<filter>
<filter-name>CorsFilterfilter-name>
<filter-class>com.mesnac.aop.MyCorsFilterfilter-cla
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- T/CIQA 96-2024热处理翡翠(红-黄色)鉴别及分类
- T/BPSPA 05-2026酵豆质量技术规范
- 河南省安阳市2026-2027学年高二上学期9月阶段考试历史试卷(含答案)
- 2025-2026年福建省部编版初中美术第9章音乐创作专项训练题库
- DB32/T 4815-2024淡水大型底栖无脊椎动物监测技术规范
- 2025-2026学年广东省深圳市光明区李松蓢学校八年级(上)质检数学试卷(含答案)
- 2025-2026年学生阅读习惯养成试卷
- 2025-2026年浙江省人教版高中音乐第10章设计基础知识点巩固习题
- 岁月峥嵘祖国长青-2026年国庆主题班会
- 2026年山西省民办中小学小升初数学联考真题试卷及答案
- 《水对地表的作用》教学设计-2026-2027学年教科版五年级科学上册
- 老旧小区改造工程监理细则
- 2026新教材统编版九年级上册历史:全册教材问题答案
- 2026烟草制品购销员(四级)考试复习题库(含答案)
- 管道焊前预热及焊后热处理(PWHT)施工组织设计方案
- 2026-2030中国外侧上髁炎(网球肘)行业市场发展趋势与前景展望战略分析研究报告
- 《钎焊》课件 第10、11章 无机非金属材料的钎焊;工具钢、钛合金及难熔合金的钎焊
- 学校肺结核宣传教育
- 中国人寿:养老险总公司招聘笔试题库2026
- 法人委托授权管理流程及模板
- 酒店总经理面试题目与评分标准
评论
0/150
提交评论