在 Spring Boot 中解决跨域问题可以通过以下几种方式:
- 使用
@CrossOrigin
注解: 在需要支持跨域的控制器方法上添加@CrossOrigin
注解。这个注解可以设置一些属性,如允许的来源(origins)、允许的请求方法(methods)、允许的请求头(allowedHeaders)等。例如: - javaCopy Code
@RestControllerpublicclassMyController {
@GetMapping("/hello")
@CrossOrigin(origins = "http://localhost:8080")
public String hello() {
return"Hello Cross Origin!";
}
}
- 配置全局跨域: 在 Spring Boot 应用的配置文件中,添加跨域配置。可以使用
WebMvcConfigurer
接口的addCorsMappings
方法来自定义跨域配置。例如: - javaCopy Code
@ConfigurationpublicclassCorsConfigimplementsWebMvcConfigurer {
@Override
publicvoidaddCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("http://localhost:8080")
.allowedMethods("*")
.allowedHeaders("*");
}
}
- 使用过滤器(Filter): 可以创建一个过滤器来处理跨域请求,通过修改响应头实现跨域支持。例如:
- javaCopy Code
@ComponentpublicclassCorsFilterimplementsFilter {
@Override
publicvoiddoFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {
HttpServletResponsehttpResponse= (HttpServletResponse) response;
httpResponse.setHeader("Access-Control-Allow-Origin", "http://localhost:8080");
httpResponse.setHeader("Access-Control-Allow-Methods", "*");
httpResponse.setHeader("Access-Control-Allow-Headers", "*");
chain.doFilter(request, response);
}
}
这些方法都可以解决跨域问题,根据实际情况选择合适的方式。需要注意的是,跨域请求可能会引发安全风险,所以在设置跨域访问时要谨慎,并确保只允许必要的来源、方法和请求头。