Spark CORS访问控制允许来源错误

时间:2017-07-25 06:31:45

标签: http cors httprequest spark-java

我在客户端使用Spark with Java和Angular 1。 当我向服务器发送请求时,我一直收到“-1”错误。 错误是“No'Access-control-allow-origin'标头出现在请求的资源上。因此,不允许原点'http://localhost:4567'访问。”

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

需要你帮助的人, 谢谢!

2 个答案:

答案 0 :(得分:5)

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());
        });
    }
}

答案 1 :(得分:4)

我已成功使用以下内容(我在此处找到: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";
    });
}
相关问题