赞
踩
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
目录
第一次尝试
跨域:指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制。
例如:a页面想获取b页面资源,如果a、b页面的协议、域名、端口、子域名不同,所进行的访问行动都是跨域的,而浏览器为了安全问题一般都限制了跨域访问,也就是不允许跨域请求资源。注意:跨域限制访问,其实是浏览器的限制。理解这一点很重要!!!
同源策略:是指协议,域名,端口都要相同,其中有一个不同都会产生跨域;
注意
CorFilter / WebMvConfigurer / @CrossOrigin 需要 SpringMVC 4.2以上版本才支持,对应springBoot 1.3版本以上。
上面前两种方式属于全局 CORS 配置,后两种属于局部 CORS配置。如果使用了局部跨域是会覆盖全局跨域的规则,所以可以通过 @CrossOrigin 注解来进行细粒度更高的跨域资源控制。
其实无论哪种方案,最终目的都是修改响应头,向响应头中添加浏览器所要求的数据,进而实现跨域。
- @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);
- }
- }
- @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("*");
- }
- }
在控制器(类上)上使用注解 @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";
- }
使用 HttpServletResponse 对象添加响应头(Access-Control-Allow-Origin)来授权原始域,这里 Origin的值也可以设置为 “*”,表示全部放行。
- @RequestMapping("/index")
- public String index(HttpServletResponse response) {
-
- response.addHeader("Access-Allow-Control-Origin","*");
- return "index";
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。