跳到主要内容

Spring Boot中如何解决跨域问题?

参考答案:

在Spring Boot中解决跨域问题通常有两种主要方法:使用@CrossOrigin注解和使用WebMvcConfigurer接口。

  1. 使用@CrossOrigin注解

如果你只是想为特定的控制器或方法启用跨域请求,你可以使用@CrossOrigin注解。这个注解可以应用于类级别或方法级别。

import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RestController;

@RestController
@CrossOrigin(origins = "http://example.com")
public class MyController {

    @GetMapping("/some-endpoint")
    public ResponseEntity<String> someEndpoint() {
        return ResponseEntity.ok("This is a CORS enabled endpoint");
    }
}

在这个例子中,@CrossOrigin(origins = "http://example.com")表示只有来自http://example.com的请求才允许跨域。如果你想允许所有来源的跨域请求,你可以使用*作为通配符:

@CrossOrigin(origins = "*")
  1. 使用WebMvcConfigurer接口

如果你想为整个应用程序启用跨域请求,你可以实现WebMvcConfigurer接口并覆盖addCorsMappings方法。

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class MyCorsConfig implements WebMvcConfigurer {

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

在这个例子中,我们为所有路径(/**)启用了跨域请求,并指定了允许的来源、HTTP方法、是否允许携带凭证以及CORS预检请求的缓存时间。

注意:在使用跨域时,务必确保你了解相关的安全风险,并采取适当的措施来保护你的应用程序。例如,只允许受信任的源进行跨域请求,并限制允许的HTTP方法。