为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 Undertow 启用跨域源

如何使用 Undertow 启用跨域源

BIG阳 2022-08-17 15:54:25
我创建了一个Web服务器,允许我的网站通过API访问我的游戏数据。我的Web服务器看起来像这样(我正在使用框架)me.apachenickpublic class WebServer {    public static void initialize() {        ServerController server = new ServerController("192.168.0.21", 8080, 8443);        server.register(new APIVirtualHost());        server.inititialize();    }}我的APIVirtualHost看起来像这样public class APIVirtualHost extends AbstractVirtualHost {    public static final String HOST_NAME = "XX.X.XX.XXX";    public APIVirtualHost() {        super(HOST_NAME);        setDirectoryListingEnabled(false);    }}显示在线玩家的示例路由如下所示@RouteManifest(template="/online/players", method="GET")public class APIHighscoresRoute extends RouteHttpHandler<JadePreprocessor> {    @Override    public void handleRequest(HttpServerExchange exchange) throws Exception {        Gson builder = new GsonBuilder().setPrettyPrinting().create();        JsonArray arr = new JsonArray();        World.getPlayers().forEach(o -> {            JsonObject obj = new JsonObject();            obj.addProperty("username", o.getUsername());            arr.add(obj);        });        exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "text/html");        exchange.getResponseSender().send(builder.toJson(arr));    }}当我现在运行Web服务器()并从我的浏览器转到时 - 这工作正常!我能够看到世界上所有的球员。WebServer.initialize()XX.X.XX.XX:8080/online/players但是,当我像这样从PHP发送cURL请求时$ch = curl_init();curl_setopt($ch, CURLOPT_URL, 'http://XX.X.XX.XXX:8080/online/players');curl_setopt($ch, CURLOPT_PORT, 8088);curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);$response = curl_exec($ch);var_dump($response);echo curl_getinfo($ch) . '<br/>';echo curl_errno($ch) . '<br/>';echo curl_error($ch) . '<br/>';curl_close($ch);我收到此错误:bool(false)数组7无法连接到 XX.X.XX.XXX 端口 8088:连接被拒绝这告诉我,在请求的资源上未启用跨源。如何在我的 Java Web 服务器上启用跨域?
查看完整描述

2 回答

?
胡子哥哥

TA贡献1825条经验 获得超6个赞

我认为这不是CORS问题,而是你的卷曲配置。您正在尝试通过 8088 端口连接,但服务位于 8080 上,更改为(或从配置中删除,您已经在CURLOPT_URL参数中拥有它):

curl_setopt($ch, CURLOPT_PORT, 8080);


查看完整回答
反对 回复 2022-08-17
?
红颜莎娜

TA贡献1842条经验 获得超12个赞

根据 Undertow,若要启用 CORS,必须下载 CORS 筛选器库。

由于这只是对我的Web服务器工作方式的限制,因此我更改了角度并简单地使其使服务器请求Web服务器,而不是相反。

是的,这是一条很长的路要走,但这是最简单的方法。

如果有人知道如何在我的情况下使用Undertow启用CORS,我将更改接受的答案。

再次感谢


查看完整回答
反对 回复 2022-08-17
  • 2 回答
  • 0 关注
  • 140 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信