如何远程调用部署在Wildfly服务器上的Resteasy后端服务
问题根因
这个问题本质是浏览器的同源策略限制:前端页面部署在Apache对应的域名/端口下,后端Resteasy服务运行在Wildfly对应的域名/端口下,只要协议、域名、端口三者有一个不同,浏览器就会拦截跨域的XHR请求。
解决方案
方案1:配置Apache反向代理(最推荐)
通过Apache把后端接口路径转发到Wildfly服务,前端请求同域名同端口,从根源避免跨域问题:
- 首先启用Apache的代理模块,Debian/Ubuntu系统执行命令:
a2enmod proxy proxy_http,CentOS/RHEL系统直接修改httpd.conf加载mod_proxy和mod_proxy_http模块即可 - 编辑Apache的站点配置文件,添加反向代理规则,示例如下(可根据实际路径调整):
# 所有/api开头的请求都会转发到本地Wildfly的Resteasy服务 ProxyPass /api http://127.0.0.1:8080/你的Resteasy服务根路径 ProxyPassReverse /api http://127.0.0.1:8080/你的Resteasy服务根路径
- 保存配置后重启Apache服务,执行命令:
systemctl restart apache2(Debian/Ubuntu)或systemctl restart httpd(CentOS/RHEL) - 前端XHR请求地址改成当前域名下的
/api/具体接口路径即可,不需要再带Wildfly的端口和地址
方案2:在Wildfly服务端配置CORS跨域许可
如果不想用反向代理,可以直接在后端配置跨域许可,允许前端所在域访问:
Resteasy代码层配置
- 在web.xml中添加CORS过滤器注册:
<context-param> <param-name>resteasy.providers</param-name> <param-value>org.jboss.resteasy.plugins.interceptors.CorsFilter</param-value> </context-param>
- 自定义CORS配置类:
@Provider public class CustomCorsFilter extends CorsFilter { public CustomCorsFilter() { // 生产环境请替换为实际的前端域名,不要用* getAllowedOrigins().add("*"); getAllowedMethods().add("GET"); getAllowedMethods().add("POST"); getAllowedMethods().add("PUT"); getAllowedMethods().add("DELETE"); getAllowedMethods().add("OPTIONS"); setAllowCredentials(true); } }
Wildfly服务器层配置
如果需要给所有部署在该Wildfly上的服务统一配置CORS,可以修改standalone.xml/domain.xml的Undertow子系统:
- 在
<server name="default-server">下的<host name="default-host">节点添加:
<filter-ref name="CORS"/>
- 在
<filters>节点添加如下配置:
<response-header name="Access-Control-Allow-Origin" header-name="Access-Control-Allow-Origin" header-value="你的实际前端域名"/> <response-header name="Access-Control-Allow-Methods" header-name="Access-Control-Allow-Methods" header-value="GET, POST, PUT, DELETE, OPTIONS"/> <response-header name="Access-Control-Allow-Headers" header-name="Access-Control-Allow-Headers" header-value="accept, authorization, content-type, x-requested-with"/> <response-header name="Access-Control-Allow-Credentials" header-name="Access-Control-Allow-Credentials" header-value="true"/>
常见问题排查
如果配置完成后仍然无法调用,检查以下项:
- 确认Wildfly服务本身运行正常,可在服务器本地用
curl命令测试接口是否能正常返回 - 若使用反向代理,确认Apache配置的Wildfly地址和端口可正常访问;若直接暴露Wildfly端口,确认端口映射和防火墙规则已放开对应端口
- 打开浏览器开发者工具的「网络」面板,查看XHR请求报错:如果提示
CORS Missing Allow Origin说明跨域配置未生效,如果返回404检查请求路径是否匹配,如果返回503确认后端服务是否正常启动
内容的提问来源于stack exchange,提问作者Hertzino
相关产品推荐
相关产品推荐

