SpringBoot 跨域资源共享
https://juejin.cn/post/7053753080176705573#heading-11
通过 Filter 过滤器手动设置响应头
@Component
@Slf4j
@WebFilter(urlPatterns = {"/*"}, filterName = "corsFilter")
public class CorsFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
log.info("启动跨域过滤器");
}
@Override
public void doFilter(ServletRequest request, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) resp;
// 手动设置响应头解决跨域访问
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE");
// 设置过期时间
response.setHeader("Access-Control-Max-Age", "86400");
response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization, uuid");
// 支持 HTTP 1.1
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
// 支持 HTTP 1.0. response.setHeader("Expires", "0");
response.setHeader("Pragma", "no-cache");
// 编码
response.setCharacterEncoding("UTF-8");
chain.doFilter(request, resp);
}
@Override
public void destroy() {
log.info("销毁跨域过滤器");
}
}
使用@CrossOrigin注解(局部跨域)
@CrossOrigin(origins = "*", maxAge = 3600, allowedHeaders = "*")
@PostMapping("/login")
public String login() {
return "login";
}
实现WebMvcConfigurer
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebMvcConfiguration implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
// 表明允许哪些域访问, 简单点可为 *
.allowedOrigins("http://localhost:3000")
.allowedHeaders("*")
.allowedMethods("*")
// allowCredentials(true): 表示附带身份凭证
// 一旦使用 allowCredentials(true) 方法,则 allowedOrigins("*") 需要指明特定的域,而不能是 *
.allowCredentials(true)
.maxAge(86400);
}
}
注入CORSFilter过滤器
@Configuration
public class CorsFilterConfiguration {
@Bean
public CorsFilter corsFilter() {
CorsConfiguration corsConfiguration = new CorsConfiguration();
// 设置放行哪些原始域
corsConfiguration.addAllowedOrigin("*");
// 放行哪些原始请求头部信息
corsConfiguration.addAllowedHeader("*");
// 放行哪些请求方法
corsConfiguration.addAllowedMethod("*");
// 添加映射路径,拦截一切请求
UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource();
urlBasedCorsConfigurationSource.registerCorsConfiguration("/**", corsConfiguration);
return new CorsFilter(urlBasedCorsConfigurationSource);
}
}
最后更新于
这有帮助吗?