详解springboot解决CORS跨域的三种方式

详解Spring Boot解决CORS跨域的三种方式

在Web应用程序中,我们经常需要解决CORS(跨域资源共享)问题。CORS是一种安全机制,用于限制跨域访问。本文将详细讲解Spring Boot解决CORS跨域的三种方式,并提供两个示例。

1. 添加依赖

在pom.xml文件中添加以下依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>2.0.0.RELEASE</version>
</dependency>

在上面的代码中,我们添加了Spring Boot Web依赖。

2. 示例1:使用注解解决CORS跨域

以下是使用注解解决CORS跨域的基本流程:

  1. 在Controller类或方法上添加@CrossOrigin注解。
@RestController
public class MyController {

    @CrossOrigin(origins = "http://localhost:8080")
    @GetMapping("/hello")
    public String hello() {
        return "Hello, World!";
    }

}

在上面的代码中,我们在MyController类上添加了@CrossOrigin注解,并指定了允许跨域访问的源地址。

  1. 运行应用程序,并访问跨域接口。

在上面的代码中,我们运行应用程序,并访问跨域接口。由于我们在Controller类上添加了@CrossOrigin注解,因此可以正常访问跨域接口。

3. 示例2:使用WebMvcConfigurer解决CORS跨域

以下是使用WebMvcConfigurer解决CORS跨域的基本流程:

  1. 创建一个名为CorsConfig的配置类,并实现WebMvcConfigurer接口。
@Configuration
public class CorsConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/api/**")
                .allowedOrigins("http://localhost:8080")
                .allowedMethods("GET", "POST", "PUT", "DELETE")
                .allowedHeaders("*")
                .allowCredentials(true)
                .maxAge(3600);
    }

}

在上面的代码中,我们创建了一个名为CorsConfig的配置类,并实现了WebMvcConfigurer接口。我们重写了addCorsMappings方法,并使用CorsRegistry对象配置跨域访问的相关信息。

  1. 运行应用程序,并访问跨域接口。

在上面的代码中,我们运行应用程序,并访问跨域接口。由于我们在CorsConfig类中配置了跨域访问的相关信息,因此可以正常访问跨域接口。

4. 示例3:使用Filter解决CORS跨域

以下是使用Filter解决CORS跨域的基本流程:

  1. 创建一个名为CorsFilter的Filter类,并实现Filter接口。
@Component
public class CorsFilter implements Filter {

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse res = (HttpServletResponse) response;
        res.setHeader("Access-Control-Allow-Origin", "http://localhost:8080");
        res.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
        res.setHeader("Access-Control-Allow-Headers", "*");
        res.setHeader("Access-Control-Allow-Credentials", "true");
        res.setHeader("Access-Control-Max-Age", "3600");
        chain.doFilter(request, response);
    }

}

在上面的代码中,我们创建了一个名为CorsFilter的Filter类,并实现了Filter接口。我们重写了doFilter方法,并使用HttpServletResponse对象设置跨域访问的相关信息。

  1. 在Spring Boot应用程序中注册CorsFilter。
@SpringBootApplication
public class MyApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }

    @Bean
    public FilterRegistrationBean<CorsFilter> corsFilterRegistration() {
        FilterRegistrationBean<CorsFilter> registration = new FilterRegistrationBean<>();
        registration.setFilter(new CorsFilter());
        registration.addUrlPatterns("/*");
        registration.setName("corsFilter");
        registration.setOrder(1);
        return registration;
    }

}

在上面的代码中,我们在Spring Boot应用程序中注册了CorsFilter,并设置了相关的配置信息。

  1. 运行应用程序,并访问跨域接口。

在上面的代码中,我们运行应用程序,并访问跨域接口。由于我们在CorsFilter类中设置了跨域访问的相关信息,因此可以正常访问跨域接口。

5. 总结

本文详细讲解了Spring Boot解决CORS跨域的三种方式,并提供了两个示例。在解决CORS跨域问题时,我们应根据实际需求选择合适的方式,并合理配置相关信息,以提高应用程序的可用性和可维护性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解springboot解决CORS跨域的三种方式 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • 解决mybatis 数据库date 与 java中Date类型映射问题

    解决mybatis 数据库date 与 java中Date类型映射问题可以通过以下步骤: 1. 增加日期类型转换器 在mybatis的配置文件中,我们可以增加一个类型转换器,将数据库中的date类型转换为Java中的Date类型。在mybatis-config.xml文件中增加如下代码: <typeHandlers> <typeHandle…

    Java 2023年5月20日
    00
  • spring mvc DispatcherServlet之前端控制器架构详解

    Spring MVC DispatcherServlet之前端控制器架构详解 在Spring MVC中,DispatcherServlet是一个核心组件,它是前端控制器模式的实现。本文将详细介绍Spring MVC DispatcherServlet之前端控制器架构的实现原理和实现过程,并提供两个示例说明。 前端控制器架构的实现原理 前端控制器架构的实现原理…

    Java 2023年5月17日
    00
  • jsp servlet javaBean后台分页实例代码解析

    环境搭建 首先需要安装java开发环境,以及一个支持jsp、servlet开发的IDE,比如Eclipse、IntelliJ IDEA等。接下来创建一个web应用程序,将jsp、servlet等文件放在该应用程序的WEB-INF目录下。 数据库设计 在实现分页之前,需要准备好数据表。这里以用户表为例,设立以下字段信息:id – 用户idname – 用户名a…

    Java 2023年6月15日
    00
  • java代码规范review异常事故记录

    下面是“Java代码规范Review异常事故记录”攻略的详细解释: 1. 异常事故记录的意义 我们编写的代码中难免会有缺陷,尤其是在团队协同开发中,每个人编写风格和习惯可能都不一样,导致代码可读性和可维护性存在问题。为了解决这些问题,我们需要对代码进行review,发现问题并及时修复。而异常事故记录则是review的重要内容之一。它可以让我们对程序中的异常情…

    Java 2023年5月27日
    00
  • Java字符串查找的三种方式

    Java字符串查找有多种方式,其中比较常见的有三种:indexOf()、lastIndexOf()和contains(),下面分别进行详细讲解。 使用indexOf()方法查找字符串 indexOf()方法将返回指定字符串在当前字符串中第一次出现的位置。该方法属于String类,它有多个重载版本,可以根据传入的参数来控制查找的起点和查找的方向。例如: Str…

    Java 2023年5月26日
    00
  • Java数据类型与MySql数据类型对照表

    让我们来详细讲解Java数据类型与MySQL数据类型对照表的完整攻略。 Java数据类型与MySQL数据类型对照表 在Java中,数据类型用于定义变量的类型,MySQL中,数据类型用于定义列的类型。两者之间存在对应关系,下面是Java数据类型与MySQL数据类型对照表。 Java数据类型 MySQL数据类型 boolean TINYINT(1) tinyin…

    Java 2023年5月19日
    00
  • SpringMVC实现文件上传与下载

    1.文件上传文件上传一般包括前端页面的文件选择、文件上传、后台接收文件、保存文件等步骤。 1.1 前端页面HTML代码示例 <form action="upload" method="post" enctype="multipart/form-data"> <input type=…

    Java 2023年6月15日
    00
  • Spring Boot如何集成模板引擎FreeMarker

    下面是 Spring Boot 集成 FreeMarker 模板引擎的完整攻略。 一、引入依赖 在 pom.xml 中添加 FreeMarker 和 Spring Boot 的依赖,如下所示: <dependency> <groupId>org.springframework.boot</groupId> <arti…

    Java 2023年5月31日
    00
合作推广
合作推广
分享本页
返回顶部