SpringBoot 中实现跨域的5种方式_第1页
SpringBoot 中实现跨域的5种方式_第2页
SpringBoot 中实现跨域的5种方式_第3页
SpringBoot 中实现跨域的5种方式_第4页
SpringBoot 中实现跨域的5种方式_第5页
已阅读5页,还剩2页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论