Spring boot如何开启跨域配置

 更新时间:2024年08月16日 08:57:18   作者:卿者飞翔  
这篇文章主要介绍了Spring boot如何开启跨域配置问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

Spring boot开启跨域配置

跨域(Cross-Origin)是指在互联网上的一个域下的文档或脚本尝试请求另一个域下的资源时,域名、协议或端口不同的这种情况。

具体来说,如果一个网页试图通过脚本(如JavaScript)从不同源的服务器上请求数据,就会触发浏览器的同源策略限制,导致跨域问题。

同源策略(Same-origin policy)是Web浏览器的一个安全功能,它要求Web浏览器仅允许执行来自同一站点的脚本访问该站点的资源。

这意味着,如果网页A尝试访问网页B的资源,且这两个网页的协议、域名或端口号中任何一个不相同,浏览器就会阻止这种访问,以防止恶意网站读取另一个网站的数据。

Spring boot解决跨域问题

一、controller添加注解

在controller层添加@CrossOrigin就可以解决跨域问题

@RestController
@RequestMapping("test")
@Slf4j
@CrossOrigin
public class DemoController {

    @RequestMapping("message")
    public String test(@RequestBody Message message) {
        log.info("{}", JSON.toJSONString(message));
        return "test";
    }
}

二、全局配置

添加如下全局配置就可以统一配置跨域支持

@Configuration
public class MvcConfig implements WebMvcConfigurer {

    /**
     * 开启全局跨域配置
     * @param registry
     */
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOriginPatterns("*")
                .allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE")
                .maxAge(3600)
                .allowCredentials(true);
    }

}

三、通过拦截器配置

通过如下拦截器配置,也可以支持跨域

public class CorsInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        //表示接受任意域名的请求,也可以指定域名
        response.setHeader("Access-Control-Allow-Origin", request.getHeader("origin"));

        //该字段可选,是个布尔值,表示是否可以携带cookie
        response.setHeader("Access-Control-Allow-Credentials", "true");

        response.setHeader("Access-Control-Allow-Methods", "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS");

        response.setHeader("Access-Control-Allow-Headers", "*");


        //这里可以不加,但是其他语言开发的话记得处理options请求
        /**
         * 非简单请求是对那种对服务器有特殊要求的请求,
         * 比如请求方式是PUT或者DELETE,或者Content-Type字段类型是application/json。
         * 都会在正式通信之前,增加一次HTTP请求,称之为预检。浏览器会先询问服务器,当前网页所在域名是否在服务器的许可名单之中,
         * 服务器允许之后,浏览器会发出正式的XMLHttpRequest请求
         */
        if(HttpMethod.OPTIONS.toString().equals(request.getMethod())){
            return true;
        }

        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

    }
}

总结

Spring boot解决跨域问题还是很方便的,遇到跨域问题,通过以上方式都可以实现解决

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Spring Bean Scope 有状态的Bean与无状态的Bean

    Spring Bean Scope 有状态的Bean与无状态的Bean

    这篇文章主要介绍了Spring Bean Scope 有状态的Bean与无状态的Bean,每个用户有自己特有的一个实例,在用户的生存期内,bean保持了用户的信息,下面来了解有状态和无状态的区别吧
    2022-01-01
  • SpringBoot读取Resource下文件的4种方法

    SpringBoot读取Resource下文件的4种方法

    这篇文章主要介绍了SpringBoot读取Resource下文件的4种方法小结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • 浅谈MyBatis所有的jdbcType类型

    浅谈MyBatis所有的jdbcType类型

    在Mybatis中JdbcType类型是一个枚举类型,它包含了所有的JDBC数据类型,如VARCHAR、INTEGER、DATE等,本文主要介绍了浅谈MyBatis所有的jdbcType类型,具有一定的参考价值,感兴趣的可以了解一下
    2023-06-06
  • Spring Boot解决项目启动时初始化资源的方法

    Spring Boot解决项目启动时初始化资源的方法

    这篇文章主要给大家介绍了关于Spring Boot如何解决项目启动时初始化资源的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-05-05
  • Java线程池之线程复用原理全面解析

    Java线程池之线程复用原理全面解析

    这篇文章主要介绍了Java线程池之线程复用原理,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • java使用POI读取properties文件并写到Excel的方法

    java使用POI读取properties文件并写到Excel的方法

    这篇文章主要介绍了java使用POI读取properties文件并写到Excel的方法,涉及java操作properties文件及Excel文件的相关技巧,需要的朋友可以参考下
    2015-06-06
  • springboot2.x只需两步快速整合log4j2的方法

    springboot2.x只需两步快速整合log4j2的方法

    这篇文章主要介绍了springboot2.x只需两步快速整合log4j2的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • Java多线程的sleep休眠的实现

    Java多线程的sleep休眠的实现

    本文主要介绍了Java多线程的sleep休眠的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • tio-http-server打包为二进制文件的实现及优势详解

    tio-http-server打包为二进制文件的实现及优势详解

    这篇文章主要为大家介绍了tio-http-server打包为二进制文件实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • Spring中的事件监听器使用学习记录

    Spring中的事件监听器使用学习记录

    Spring框架中的事件监听机制是一种设计模式,它允许你定义和触发事件,同时允许其他组件监听这些事件并在事件发生时作出响应,这篇文章主要介绍了Spring中的事件监听器使用学习,需要的朋友可以参考下
    2024-07-07

最新评论