【问题标题】:Spark CORS Access-control-allow-origin errorSpark CORS 访问控制允许来源错误
【发布时间】:2017-12-30 22:06:51
【问题描述】:

我在客户端使用带有 Java 和 Angular 1 的 Spark。 当我向服务器发送请求时,我不断收到这个“-1”错误。 错误是“请求的资源上不存在 'Access-control-allow-origin' 标头。因此不允许访问源 'http://localhost:4567'。”

我知道这是一个 CORS 问题,所以我添加了标题 'Access-Control-Allow-Origin' : '*' 并将其添加到服务器端的响应中。 不幸的是,它似乎并没有解决我的问题。

需要你们的帮助, 谢谢!

【问题讨论】:

标签: http cors httprequest spark-java


【解决方案1】:

我已经成功使用了以下内容(我在这里找到了:https://gist.github.com/zikani03/7c82b34fbbc9a6187e9a):

//add correct package 

import com.mpaw.app.controllers.Apply;
import java.util.HashMap;
import spark.Filter;
import spark.Request;
import spark.Response;
import spark.Spark;

/**
 * Really simple helper for enabling CORS in a spark application;
 */
public class CorsFilter /*implements Apply*/{

    private final HashMap<String, String> corsHeaders = new HashMap<>();

    public CorsFilter() {
        corsHeaders.put("Access-Control-Allow-Methods", "GET,PUT,POST,DELETE,OPTIONS");
        corsHeaders.put("Access-Control-Allow-Origin", "*");
        corsHeaders.put("Access-Control-Allow-Headers", "Content-Type,Authorization,X-Requested-With,Content-Length,Accept,Origin,");
        corsHeaders.put("Access-Control-Allow-Credentials", "true");
    }

    @Override
    public void apply() {
        Filter filter = new Filter() {
            @Override
            public void handle(Request request, Response response) throws Exception {
                corsHeaders.forEach((key, value) -> {
                    response.header(key, value);
                });
            }
        };
        Spark.after(filter);
    }
}

用法:

public static void main(String[] args) {
    CorsFilter.apply(); // Call this before mapping thy routes
    Spark.get("/hello", (request, response) -> {
        return "Hello";
    });
}

【讨论】:

  • 此外,如果您设置自定义端口,则必须在 调用应用 CorsFilter.apply() 之前完成。
  • @toinetoine 如果您设置自定义端口,为什么?而不是之后?有什么区别?
【解决方案2】:

Spark.after()是你的朋友

package com.company.package;

import static spark.Spark.*;

import com.google.gson.Gson;
import spark.Filter;
import spark.Request;
import spark.Response;

public class MyClass {

    public static void main(String[] args) {
        final Service service = new ServiceImpl();

        after((Filter) (request, response) -> {
            response.header("Access-Control-Allow-Origin", "*");
            response.header("Access-Control-Allow-Methods", "GET");
        });

        get( "/something", (req, res)->{
            res.type("application/json");
            return new Gson().toJsonTree(service.getNodes());
        });
    }
}

【讨论】:

    猜你喜欢
    • 2020-08-16
    • 1970-01-01
    • 2017-12-28
    • 1970-01-01
    • 2019-02-09
    • 2016-06-02
    • 2013-03-02
    相关资源
    最近更新 更多