SpringBoot 跨域请求处理
Posted Yan Yang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot 跨域请求处理相关的知识,希望对你有一定的参考价值。
跨域请求处理
内容
1. 跨域请求流程
发送跨域请求总共会发送 2 次请求,首先发送的是域请求,域请求和你发送的真实请求请求地址一致,只不过不带参数,而且请求方式是 OTIONS,我们需要重写父类提供的跨域请求处理的接口;
2. 代码实现
package com.yy.springboot.config;
import com.yy.springboot.interceptor.CheckLoginInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {
// 重写父类提供的跨域请求处理的接口
@Override
public void addCorsMappings(CorsRegistry registry) {
// 添加映射路径
registry.addMapping("/**")
// 放行哪些原始域
// .allowedOrigins("*")
.allowedOriginPatterns("*")
// 是否发送 Cookie 信息
.allowCredentials(true)
// 放行哪些原始域(请求方式)
.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
// 放行哪些原始域(头部信息)
.allowedHeaders("*")
// 暴露哪些头部信息(因为跨域访问默认不能获取全部头部信息)
.exposedHeaders("Header1", "Header2");
}
}
3. 拦截器放行跨域请求
@Component
public class CheckLoginInterceptor implements HandlerInterceptor {
@Autowired
private IUserInfoService userInfoService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 1:静态资源处理对象:ResourceHanler?
// 2:跨域的预请求处理对象:PreFlightHandler
// 3:动态请求处理对象:HandlerMethod
// 跨域处理,不是动态请求(域请求)就放行,动态请求进不去
if (!(handler instanceof HandlerMethod)) {
return true;
}
// ......
}
总结
上面就是SpringBoot 跨域请求处理的总结了,代码仅供参考,欢迎讨论交流。
以上是关于SpringBoot 跨域请求处理的主要内容,如果未能解决你的问题,请参考以下文章