Springboot中如何实现跨域访问控制

柠檬味的夏天 2022-01-13 ⋅ 15 阅读

在开发Web应用程序时,经常会遇到跨域访问的问题。跨域访问是指通过前端代码从一个域名的网站去请求访问另一个域名的资源。由于浏览器的同源策略限制,这种跨域访问默认是被禁止的。然而,在一些场景下,我们确实需要实现跨域访问控制,例如前后端分离的开发模式下,前端代码部署在一个域名下,而后端代码部署在另一个域名下。

在Spring Boot中,我们可以很方便地实现跨域访问控制。下面将介绍两种常用的实现方式。

1. 使用@CrossOrigin注解

@CrossOrigin是Spring Framework中的一个注解,可以用于指定允许跨域访问的源、请求方法、请求头等信息。

在Spring Boot中,我们可以在Controller层的方法上使用@CrossOrigin注解,以实现跨域访问控制。例如:

@RestController
public class MyController {

    @CrossOrigin(origins = "http://www.example.com")
    @GetMapping("/api/data")
    public String getData() {
        // 处理请求并返回数据
        return "Data";
    }
}

在上面的例子中,@CrossOrigin注解的origins属性指定了允许跨域访问的源,即http://www.example.com。这样,来自http://www.example.com域名下的前端代码就可以通过Ajax等方式访问/api/data接口了。

除了origins属性外,@CrossOrigin注解还有一些其他的属性,可以根据需求来设置。

2. 使用WebMvcConfigurer配置类

除了使用@CrossOrigin注解外,我们还可以通过编写一个WebMvcConfigurer配置类来实现跨域访问控制。这种方式更加灵活,可以配置更多的选项。

首先,创建一个实现了WebMvcConfigurer接口的配置类:

@Configuration
public class CorsConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/api/**")
                .allowedOrigins("http://www.example.com")
                .allowedMethods("GET", "POST")
                .allowedHeaders("Authorization", "Content-Type")
                .allowCredentials(true)
                .maxAge(3600);
    }
}

在上面的配置类中,我们通过addCorsMappings()方法来配置跨域访问控制。这里的示例配置表示允许http://www.example.com域名下的前端代码访问以/api/开头的接口,只允许GET和POST方法的请求,并且允许携带AuthorizationContent-Type等请求头,允许携带Cookie,缓存时间为3600秒。

然后,在主类中添加@EnableWebMvc注解,使配置类生效:

@SpringBootApplication
@EnableWebMvc
public class MyApp {
    public static void main(String[] args) {
        SpringApplication.run(MyApp.class, args);
    }
}

通过以上配置,我们就可以实现跨域访问控制了。

总结:在Spring Boot中,我们可以通过@CrossOrigin注解或者编写一个实现了WebMvcConfigurer接口的配置类来实现跨域访问控制。根据实际情况和需求,选择合适的方式进行配置。

希望本篇文章对你理解Spring Boot中如何实现跨域访问控制有所帮助!


全部评论: 0

    我有话说: