Spring Boot中如何解决跨域问题?
参考答案:
在Spring Boot中解决跨域问题通常有两种主要方法:使用@CrossOrigin
注解和使用WebMvcConfigurer
接口。
- 使用
@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 = "*")
- 使用
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方法。