springboot跨域怎么处理
时间: 2023-10-18 13:21:12 浏览: 45
Spring Boot支持多种跨域处理方式,以下是其中几种:
1. 使用注解
在需要处理跨域的Controller类或方法上使用@CrossOrigin注解即可,例如:
```
@RestController
@RequestMapping("/api")
@CrossOrigin(origins = "http://localhost:8080")
public class ApiController {
// 控制器方法
}
```
2. 使用WebMvcConfigurer
在配置类中实现WebMvcConfigurer接口,并重写addCorsMappings方法,例如:
```
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/api/**")
.allowedOrigins("http://localhost:8080")
.allowedMethods("GET", "POST")
.allowedHeaders("*");
}
}
```
3. 使用Filter
创建一个Filter,处理跨域请求,例如:
```
@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class CorsFilter implements Filter {
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
HttpServletRequest request = (HttpServletRequest) req;
response.setHeader("Access-Control-Allow-Origin", "http://localhost:8080");
response.setHeader("Access-Control-Allow-Methods", "GET, POST");
response.setHeader("Access-Control-Allow-Headers", "*");
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Max-Age", "3600");
if ("OPTIONS".equalsIgnoreCase(request.getMethod())) {
response.setStatus(HttpServletResponse.SC_OK);
} else {
chain.doFilter(req, res);
}
}
}
```
以上三种方式均可实现跨域处理,具体选择哪种方式取决于个人喜好和项目需求。