SpringCloud(10)—— 国寿i动项目经验之(解决前后端跨域请求技术)
国寿i动项目经验之(解决前后端跨域请求技术):
由于网段原因,导致前端js请求后端服务接口出现跨域,没法实现正常的请求,所以需要对请求进行跨域处理
引入jar:
<!-- 解决前后端接口交互跨域问题 -->
<dependency>
<groupId>com.thetransactioncompany</groupId>
<artifactId>cors-filter</artifactId>
<version>1.7</version>
</dependency>
<dependency>
<groupId>com.thetransactioncompany</groupId>
<artifactId>java-property-utils</artifactId>
<version>1.9</version>
</dependency>
configuration 类文件中 解决跨域的Bean
package com.sinosoft.config; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import org.springframework.web.filter.CorsFilter; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import java.util.ArrayList; import java.util.List; @Configuration public class WebMvcConfigurer extends WebMvcConfigurerAdapter { private static final Logger LOGGER = LoggerFactory.getLogger(WebMvcConfigurer.class); /** * 添加拦截器 目的是拦截前端过来的请求 * * @param registry */ public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new RequestLog()).addPathPatterns("/**"); super.addInterceptors(registry); } /** * 初始化过滤器 */ @Bean public FilterRegistrationBean filterRegistrationBean() { FilterRegistrationBean registrationBean = new FilterRegistrationBean(); MyFilter httpBasicFilter = new MyFilter(); registrationBean.setFilter(httpBasicFilter); List<String> urlPatterns = new ArrayList<String>(); urlPatterns.add("*"); registrationBean.setUrlPatterns(urlPatterns); return registrationBean; } /** * 解决前端跨域请求 * <p> * 简单跨域就是GET,HEAD和POST请求,但是POST请求的"Content-Type"只能是application/x-www-form-urlencoded, multipart/form-data 或 text/plain * <p> * 反之,就是非简单跨域,此跨域有一个预检机制,说直白点,就是会发两次请求,一次OPTIONS请求,一次真正的请求 * * @return */ @Bean public CorsFilter corsFilter() { LOGGER.info("开启CorsFilter,解决前后端分离模式接口交互跨域问题"); final UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource(); final CorsConfiguration corsConfiguration = new CorsConfiguration(); corsConfiguration.setAllowCredentials(true);// 允许cookies跨域 corsConfiguration.addAllowedOrigin("*");// #允许向该服务器提交请求的URI,*表示全部允许,在SpringMVC中,如果设成*,会自动转成当前请求头中的Origin corsConfiguration.addAllowedHeader("*");// #允许访问的头信息,*表示全部 corsConfiguration.setMaxAge(18000L);// 预检请求的缓存时间(秒),即在这个时间段里,对于相同的跨域请求不会再预检了 corsConfiguration.addAllowedMethod("*");//允许所有的请求方式 urlBasedCorsConfigurationSource.registerCorsConfiguration("/**", corsConfiguration); return new CorsFilter(urlBasedCorsConfigurationSource); } }

浙公网安备 33010602011771号