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 跨域请求处理的主要内容,如果未能解决你的问题,请参考以下文章

Springboot处理CORS跨域请求的三种方法

SpringBoot:处理跨域请求

跨域SpringBoot跨域,拦截器中,第一次获取的请求头为NULL,发送两次请求的处理方式

SpringBoot跨域小结

springboot如何解决跨域问题?

学习小片段——springboot 错误处理