赞
踩
当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域
当前页面url | 被请求页面url | 是否跨域 | 原因 |
http://www.test.com/ | http://www.test.com/index.html | 否 | 同源(协议、域名、端口号相同) |
http://www.test.com/ | https://www.test.com/index.html | 跨域 | 协议不同(http/https) |
http://www.test.com/ | http://www.baidu.com/ | 跨域 | 主域名不同(test/baidu) |
http://www.test.com/ | http://blog.test.com/ | 跨域 | 子域名不同(www/blog) |
http://www.test.com:8080/ | http://www.test.com:7001/ | 跨域 | 端口号不同(8080/7001) |
@Configuration public class WebMvcConfiguration implements WebMvcConfigurer { @Bean public CorsFilter corsFilter() { final UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource(); final CorsConfiguration corsConfiguration = new CorsConfiguration(); /* 是否允许请求带有验证信息 */ corsConfiguration.setAllowCredentials(true); /* 允许访问的客户端域名 */ corsConfiguration.addAllowedOrigin("*"); /* 允许服务端访问的客户端请求头 */ corsConfiguration.addAllowedHeader("*"); /* 允许访问的方法名,GET POST等 */ corsConfiguration.addAllowedMethod("*"); urlBasedCorsConfigurationSource.registerCorsConfiguration("/**", corsConfiguration); return new CorsFilter(urlBasedCorsConfigurationSource); } }
在
SpringBoot
中自定义过滤器的优先级高于WebMvcConfigurer
中定义的过滤器
public class CustomerCorsFilter extends CorsFilter { public CustomerCorsFilter() { super(configurationSource()); } private static UrlBasedCorsConfigurationSource configurationSource() { // CORS授权 CorsConfiguration config = new CorsConfiguration(); config.setAllowCredentials(true); config.addAllowedOrigin("*"); config.addAllowedHeader("*"); config.addAllowedMethod("*"); config.addExposedHeader(HttpHeaders.SET_COOKIE); config.setMaxAge(3600L); UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); source.registerCorsConfiguration("/**", config); return source; } }
@Configuration public class FilterConfig { @Bean public Filter authFilter(){ return new AuthFilter(); } /** * WARNING :跨域过滤器,注意执行顺序,必须要在AuthFilter过滤器之后 * @return */ @Bean public FilterRegistrationBean corsFilterRegistration() { FilterRegistrationBean registration = new FilterRegistrationBean(); //添加过滤器 registration.setFilter(new CustomerCorsFilter()); List<String> urlList = new ArrayList<>(); urlList.add("/*"); //设置过滤路径,/*所有路径 registration.setUrlPatterns(urlList); //添加默认参数 registration.setName("CorsFilter"); //设置优先级 registration.setOrder(-1); return registration; } @Bean public FilterRegistrationBean authFilterRegistration() { FilterRegistrationBean registration = new FilterRegistrationBean(); //添加过滤器 registration.setFilter(authFilter()); List<String> urlList = new ArrayList<>(); urlList.add("/*"); //设置过滤路径,/*所有路径 registration.setUrlPatterns(urlList); //添加默认参数 registration.setName("authFilter"); //设置优先级 registration.setOrder(1); return registration; } }
order的顺序越小优先级越高。
http://a.a.com:81/A
中想访问http://b.b.com:81/B
server {
listen 80;
server_name www.my.com;
location /A {
proxy_pass http://a.a.com:81/A;
index index.html index.htm;
}
location /B {
proxy_pass http://b.b.com:81/B;
index index.html index.htm;
}
}
其他的可以了解下java后端解决跨域问题
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。