解决方法
- 新建一个 Filter 实现 Filter 接口
- 在doFilter() 里实现
public final void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest)request;
HttpServletResponse httpResponse = (HttpServletResponse)response;
//是否带cookie
httpResponse.setHeader("Access-Control-Allow-Credentials", "true");
//跨域
// httpResponse.setHeader("Access-Control-Allow-Origin", "*");
// httpResponse.setHeader("Access-Control-Allow-Origin", "http://localhost:3000");
// 设置允许多个域名请求
String[] allowDomains = {"http://localhost:3000", "http://10.10.150.194:3000", "http://localhost:8082"};
Set allOrigins = new HashSet(Arrays.asList(allowDomains));
String originHeader = ((HttpServletRequest) request).getHeader("Origin");
if (allOrigins.contains(originHeader)){
httpResponse.setHeader("Access-Control-Allow-Origin", originHeader);
}
// httpResponse.setHeader("Access-Control-Allow-Origin", "http://10.10.150.194:3000");
//请求方式
httpResponse.setHeader("Access-Control-Allow-Methods", "POST,GET,OPTIONS,DELETE,PUT");
//返回结果缓存
httpResponse.setHeader("Access-Control-Max-Age", "3600");
httpResponse.setHeader("Access-Control-Allow-Headers", "x-requested-with,Content-Type");
httpResponse.setHeader("Content-type", "text/html;charset=UTF-8");
request.setCharacterEncoding("UTF8");
response.setCharacterEncoding("UTF8");
String currentURL = httpRequest.getServletPath().replaceAll("//", "/");
if (this.isWhiteURL(currentURL)) {
chain.doFilter(request, response);
} else {
if (this.recordLog) {
logger.info("{}|{}", currentURL, this.formatRequestParamToJSON(httpRequest));
}
if (this.requestFilter(httpRequest, httpResponse, currentURL)) {
this.doFilter(httpRequest, httpResponse, chain);
}
}
}
这里配置了多个域名访问
Spring Boot 跨域解决
package com.eyelake.config;
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.CorsRegistry;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* @Author: LiangJingXing
* @Date: 2019/8/20 15:22
* @Decription:跨域处理
*/
@Configuration
@EnableWebMvc
public class CorsConfig implements WebMvcConfigurer {
private CorsConfiguration buildConfig() {
CorsConfiguration corsConfiguration = new CorsConfiguration();
corsConfiguration.addAllowedOrigin("*");
corsConfiguration.addAllowedHeader("*");
corsConfiguration.addAllowedMethod("*");
return corsConfiguration;
}
@Bean
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", buildConfig());
return new CorsFilter(source);
}
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowCredentials(true)
.allowedMethods("*")
.maxAge(3600);
}
}