springboot解决跨域问题

跨域

首先,跨域是浏览器的同源策略,其实对于接口来讲,有请求就有响应,也就是说即便是跨域,正确的响应已经给到了浏览器,浏览器如果发现是跨域了,就会对响应做校验,看看是否有允许跨域的设置,(请求头设置跨域字段),如果有就把响应给到请求,如果没有则丢弃掉该响应,这就是浏览器的同源策略
浏览器发送请求有几种方式,**我常用第5种,比较方便,一个注解搞定**
	(1)、<sript src="url"/>、<a/>、<image/>等标签,该请求不存在跨域问题
	(2)、ajax请求,ajax请求是存在跨域问题的
跨域常用的解决方式:
	(1)jsonp,所谓jsonp就是把ajax请求的方式转为标签请求,也就是<sript src="url"/>这种方式,因为标签请求不存在跨域问题,但该方式只有一个Url,也就是只支持路径拼接传参,只能支持GET请求
	(2)nginx转发,浏览器到nginx也是跨域的,可以只在Nginx配置跨域就行了
	(3)过滤器,过滤器方式设置请求的响应头信息,
	public class SimpleCORSFilter implements Filter{  
    @Override  
    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");  
            chain.doFilter(req, res);  
          
    }  
}

	(4)springboot同源策略
@Configuration
public class CorsConfig {
    @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);
    }
}

(5)、@CrossOrigin注解
上面几种方式都是粗粒度的,springmvc提供了这样的注解,可以添加在controller类上,也可以添加到方法上,但注意,方法必须使用rest风格注解,比如@GetMapping或者指定请求方式:@RequestMapping(method = “POST”)
该注解有很多参数值可设置,默认全部请求

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值