Spark 框架 cookie 始终为空
Spark Framework cookies always null
这是我的第一个post,所以我希望我做的一切都正确。
所以,我的问题是每次我在 Spark Framework 中设置一个 cookie 时,只要我想访问它,它就会为空。这是我的浏览器 (IE/Edge) 在我发送请求时收到的内容:
这是我的 Spark 服务器:
public Server(int port, boolean skipPort) {
isRunning = true;
if(!skipPort)
port(port);
post("/login", new Route() {
public Object handle(Request req, Response res) throws Exception {
String body = req.body();
JsonElement element = new JsonParser().parse(body);
JsonObject object = element.getAsJsonObject();
String password = object.get("password").getAsString();
String account = object.get("account").getAsString();
if(!ValueHelper.isEmtpy(password) && !ValueHelper.isEmtpy(account)) {
res.cookie("Test", "Hallo");
return isLoginValid(account, password);
}else
return false;
}
});
get("/valid", new Route() {
public Object handle(Request req, Response res) throws Exception {
Main.instance().getLog().debug(req.cookie("Test"));
return false;
}
});
options("/*",
new Route() {
public Object handle(Request request, Response response) throws Exception {
String accessControlRequestHeaders = request
.headers("Access-Control-Request-Headers");
if (accessControlRequestHeaders != null) {
response.header("Access-Control-Allow-Headers",
accessControlRequestHeaders);
}
String accessControlRequestMethod = request
.headers("Access-Control-Request-Method");
if (accessControlRequestMethod != null) {
response.header("Access-Control-Allow-Methods",
accessControlRequestMethod);
}
return "OK";
}
});
before(new Filter() {
public void handle(Request request, Response response) throws Exception {
response.header("Access-Control-Allow-Origin", "*");
}
});
}
要理解这一点:首先我从我的前端调用“/login”(在本例中是一个带有 Axios 的 React-App),然后我调用“/valid”。在我的控制台中,我得到了这个:
[16:48:47 INFO]: [Portal] null
但它应该让我得到 cookie 的值 ("Hallo")。
我做错了什么?还是我误会了什么?
感谢所有愿意帮助的人^^
经过数小时的研究,我终于找到了问题所在。这不是 Spark 本身的问题。在我的应用程序中,我使用 axios 发出请求。 Axios 显然像 Ajax 一样工作或使用它。因此,我需要将以下内容添加到请求的 Axios 配置中:
withCredentials: true
在我的 header 配置响应中,我需要添加以下内容:
response.header("Access-Control-Allow-Credentials", "true");
现在一切都很顺利
这是我的第一个post,所以我希望我做的一切都正确。
所以,我的问题是每次我在 Spark Framework 中设置一个 cookie 时,只要我想访问它,它就会为空。这是我的浏览器 (IE/Edge) 在我发送请求时收到的内容:
这是我的 Spark 服务器:
public Server(int port, boolean skipPort) {
isRunning = true;
if(!skipPort)
port(port);
post("/login", new Route() {
public Object handle(Request req, Response res) throws Exception {
String body = req.body();
JsonElement element = new JsonParser().parse(body);
JsonObject object = element.getAsJsonObject();
String password = object.get("password").getAsString();
String account = object.get("account").getAsString();
if(!ValueHelper.isEmtpy(password) && !ValueHelper.isEmtpy(account)) {
res.cookie("Test", "Hallo");
return isLoginValid(account, password);
}else
return false;
}
});
get("/valid", new Route() {
public Object handle(Request req, Response res) throws Exception {
Main.instance().getLog().debug(req.cookie("Test"));
return false;
}
});
options("/*",
new Route() {
public Object handle(Request request, Response response) throws Exception {
String accessControlRequestHeaders = request
.headers("Access-Control-Request-Headers");
if (accessControlRequestHeaders != null) {
response.header("Access-Control-Allow-Headers",
accessControlRequestHeaders);
}
String accessControlRequestMethod = request
.headers("Access-Control-Request-Method");
if (accessControlRequestMethod != null) {
response.header("Access-Control-Allow-Methods",
accessControlRequestMethod);
}
return "OK";
}
});
before(new Filter() {
public void handle(Request request, Response response) throws Exception {
response.header("Access-Control-Allow-Origin", "*");
}
});
}
要理解这一点:首先我从我的前端调用“/login”(在本例中是一个带有 Axios 的 React-App),然后我调用“/valid”。在我的控制台中,我得到了这个:
[16:48:47 INFO]: [Portal] null
但它应该让我得到 cookie 的值 ("Hallo")。
我做错了什么?还是我误会了什么?
感谢所有愿意帮助的人^^
经过数小时的研究,我终于找到了问题所在。这不是 Spark 本身的问题。在我的应用程序中,我使用 axios 发出请求。 Axios 显然像 Ajax 一样工作或使用它。因此,我需要将以下内容添加到请求的 Axios 配置中:
withCredentials: true
在我的 header 配置响应中,我需要添加以下内容:
response.header("Access-Control-Allow-Credentials", "true");
现在一切都很顺利