在 Java 后端(API 接口)中解决**跨域(CORS)**问题,常见做法有以下几种,按使用场景给你总结:
@CrossOrigin 注解(局部)适合单个接口或 Controller:
@RestController
@CrossOrigin(origins = "http://localhost:8080")
public class UserController {
@GetMapping("/user")
public String getUser() {
return "user";
}
}
允许多个域名:
@CrossOrigin(origins = {"http://a.com", "http://b.com"})
写一个配置类,统一处理:
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOriginPatterns("*")
.allowedMethods("GET","POST","PUT","DELETE")
.allowedHeaders("*")
.allowCredentials(true);
}
}
⚠️ 注意:
allowedOriginPatterns("*") 常用于带 cookie 的场景allowedOrigins("*") 不能与 allowCredentials(true) 同时使用适合非 Spring MVC 或统一拦截:
@WebFilter("/*")
public class CorsFilter implements Filter {
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "GET,POST,PUT,DELETE");
response.setHeader("Access-Control-Allow-Headers", "*");
chain.doFilter(req, res);
}
}
如果用了 Spring Security,必须在 Security 中放行 CORS:
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.cors().and()
.csrf().disable();
return http.build();
}
}
并保留上面的 CorsConfig。
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "GET, POST");
response.setHeader("Access-Control-Allow-Headers", "Content-Type");
CORS policy → 后端没配置cookie → 必须:
allowCredentials(true)origin 不能是 *OPTIONS 必须返回 200❌ allowedOrigins("*") + allowCredentials(true)
✅ 改成 allowedOriginPatterns("*")
❌ 只配置 Controller,没放行 Security
✅ Security 加 .cors()
如果你愿意,可以告诉我:
我可以直接给你一份可用代码。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。