在Java后端开发中,实现跨域访问主要有以下四种方式:
- 通过
@CrossOrigin
注解:这是Spring Framework提供的一个注解,用于快速实现跨域支持。
@CrossOrigin(origins = "http://domain.com")
@RestController
public class MyController {
// ...
}
- 全局配置:通过实现
WebMvcConfigurer
接口,并覆盖addCorsMappings
方法,可以全局配置跨域访问。
@Configuration
public class MyConfiguration implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**").allowedOrigins("http://domain.com");
}
}
- 使用Filter:通过自定义Filter添加跨域的相关headers。
@Component
public class SimpleCORSFilter implements Filter {
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
response.setHeader("Access-Control-Allow-Origin", "http://domain.com");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
chain.doFilter(req, res);
}
// ...
}
- 使用CorsFilter:这是一个更为通用的方式,通过Java CORS Filter库或自定义实现Filter接口来设置跨域。
@Bean
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
config.addAllowedOrigin("http://domain.com");
config.addAllowedHeader("*");
config.addAllowedMethod("*");
source.registerCorsConfiguration("/**", config);
return new CorsFilter(source);
}
这四种方式的优先级依次递增,即Filter > 全局配置 > @CrossOrigin
注解 > CorsFilter。通常情况下,推荐使用全局配置或者@CrossOrigin
注解,因为它们更为简洁和集成在框架中。