2021-07-19 09:10:58
在Java中实现跨域的核心是让服务器支持CORS(跨域资源共享),以下是几种常见实现方式及关键细节说明:
一、使用Filter过滤器(通用Java Web项目)通过自定义Filter在响应头中添加CORS字段,适用于Servlet、Spring等所有Java Web项目。
Access-Control-Allow-Origin:允许的域名(*表示任意域名,生产环境建议指定具体域名)。
Access-Control-Allow-Methods:允许的HTTP方法(如GET, POST, OPTIONS)。
Access-Control-Allow-Headers:允许的请求头(如Content-Type, Authorization)。
Access-Control-Max-Age:预检请求缓存时间(秒)。
在web.xml中配置<filter>和<filter-mapping>。
或使用@WebFilter注解(需Servlet 3.0+)。
在Controller类或方法上添加@CrossOrigin注解,快速开启跨域支持。
类级别:该Controller下所有接口生效。
方法级别:仅当前方法生效(优先级高于类级别)。
origins:允许的域名(如
methods:允许的HTTP方法(如RequestMethod.GET)。
allowCredentials:是否允许凭证(如Cookie,需配合Access-Control-Allow-Origin为具体域名)。
通过实现WebMvcConfigurer接口的addCorsMappings方法,统一管理跨域规则。
集中配置,避免重复注解。
支持复杂规则(如路径匹配、多域名)。
allowedOriginPatterns:支持通配符的域名匹配(如http://*.example.com)。
allowedMethods:允许的HTTP方法列表。
allowCredentials:是否允许凭证(需与allowedOrigins非*配合)。
通过Nginx将前端和后端统一代理,使前端请求的域名与后端一致,规避跨域。
复杂请求(如含自定义头、非简单方法)会先发送OPTIONS请求,服务器需正确响应。
Filter和全局配置需显式处理OPTIONS方法。
若前端启用withCredentials: true,后端需设置Access-Control-Allow-Origin为具体域名(非*),并配置allowCredentials(true)。
生产环境避免使用Access-Control-Allow-Origin: *,需明确指定可信域名。
限制允许的HTTP方法和头,避免过度开放。
通过以上方法,可灵活解决Java项目中的跨域问题,具体选择需结合技术栈和部署架构。