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

Tom*_*nur 2 http httprequest cors spark-java

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

我知道这是一个CORS问题,因此我添加了标头'Access-Control-Allow-Origin':'*'并将其也添加到服务器端的响应中。不幸的是,这似乎无法解决我的问题。

需要您的帮助,谢谢!

Qua*_*ion 5

我已成功使用以下内容(我在这里找到: 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

用法:

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


Mon*_*ded 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());
        });
    }
}
Run Code Online (Sandbox Code Playgroud)