详解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日

相关文章

  • springboot集成schedule实现定时任务

    下面是springboot集成schedule实现定时任务的完整攻略: 1. 学习前提 在学习本篇攻略之前,需要掌握以下基础知识: Java基础语法 Spring框架基础知识 SpringBoot框架基础知识 2. Schedule简介 Schedule是Spring框架提供的一种任务调度框架,用于在指定的时间间隔内执行指定的任务。Schedule有以下几种…

    Java 2023年5月15日
    00
  • 关于Java的ArrayList数组自动扩容机制

    关于Java的ArrayList数组自动扩容机制,一般我们可以从两个角度来讲解:实际使用场景和内部实现原理。 实际使用场景 在我们实际开发中,ArrayList是一个非常常用的数据结构。它具有动态扩容的特性,因此可以根据实际使用情况自动调整大小。这在许多场景中非常实用,例如需要存储大量数据的情况,或者需要频繁进行插入、删除操作的情况。下面是两个常见的示例说明…

    Java 2023年5月26日
    00
  • Spring Boot 从静态json文件中读取数据所需字段

    下面我来为你详细讲解一下“Spring Boot 从静态json文件中读取数据所需字段”的攻略。 准备工作 首先,我们需要在Spring Boot应用程序中添加依赖: <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>j…

    Java 2023年5月26日
    00
  • SSM框架把日志信息保存到数据库过程详解

    我来为你详细讲解“SSM框架把日志信息保存到数据库过程详解”的完整攻略。 一、什么是日志信息? 日志是指记录应用程序运行时产生的信息的一种机制,即将系统状态、行为和异常信息以文本或XML格式记录下来,供系统管理、软件开发、故障排查等方面进行分析、追踪和调试。 二、为什么要把日志信息保存到数据库? 为了更好地管理和维护系统,我们通常需要把日志信息保存到数据库中…

    Java 2023年6月15日
    00
  • 实例详解Android 获取短信会话列表

    实例详解Android 获取短信会话列表 为什么需要获取短信会话列表 在我们的日常生活中需要经常使用手机发送和接收短信,而对于一些需要短信的应用程序来说,获取短信会话列表是很有必要的,比如备份短信、导出短信等等。因此,本文将介绍获取Android短信会话列表的方法。 实现步骤 1. 添加权限 首先,在AndroidManifest.xml文件中添加权限: &…

    Java 2023年5月23日
    00
  • JavaSpringBoot报错“MethodArgumentTypeMismatchException”的原因和处理方法

    当使用Java的Spring Boot框架时,可能会遇到“MethodArgumentTypeMismatchException”错误。这个错误通常是由以下原因之一引起的: 参数类型不匹配:如果控制器方法的参数类型与请求参数类型不匹配,则可能会出现此错误。在这种情况下,需要确保控制器方法的参数类型与请求参数类型匹配。 参数格式不正确:如果请求参数格式不正确,…

    Java 2023年5月5日
    00
  • java获取Date时间的各种方式汇总

    Java获取Date时间的各种方式汇总 Date类作为Java中常用的日期时间操作类,提供了多种获取时间的方式。本文将为大家详细介绍Java中常见的Date时间获取方式,希望对大家有所帮助。 currentTimeMillis() currentTimeMillis()方法返回当前系统时间的毫秒数。可以通过将这个时间链接到Date构造函数中来创建对应的Dat…

    Java 2023年5月20日
    00
  • Java获取当前时间方法总结

    Java获取当前时间方法总结 在Java中,有多种方法可以获取当前时间。本文将总结其中常用的方法,并提供示例代码。 方法一:使用System.currentTimeMillis() System.currentTimeMillis()方法返回当前时间的毫秒数。可以使用这个值来获取当前时间。 示例代码: long currentTimeMillis = Sys…

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