我有一个restlet资源,用于对一个人进行身份验证并使用密钥设置cookie:
@Post("json")
public Representation login(String json) {
// validate user credentials ...
getResponse().getCookieSettings().add(new CookieSetting(1, "k", key));
getResponse().getCookieSettings().add(new CookieSetting(1, "p", person.getURI()));
return new StringRepresentation(response.toString(), MediaType.APPLICATION_JSON);
}
当我调用与login()方法关联的URL时,一切似乎都没问题。 cookie似乎在响应中正确返回,如果我之前已收到过cookie,则会将它们发送到服务器:
Remote Address: 127.0.0.1:8000
Request URL: http://127.0.0.1:8000/api/person
Request Method: POST
Status Code: 200 OK
请求标题
Accept: undefined
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8,pt-PT;q=0.6,pt;q=0.4,es-419;q=0.2,es;q=0.2,en-GB;q=0.2
Connection: keep-alive
Content-Length: 42
Content-Type: application/json
Cookie: k="546f71445bf1bacd60a3f715d0250267"; p="http://compflow.pt/flowOntology/admin"
Host: 127.0.0.1:8000
Origin: http://127.0.0.1:8000
Referer: http://127.0.0.1:8000/job
X-Requested-With: XMLHttpRequest
响应标题
Accept-Ranges: bytes
Content-Length: 46
Content-Type: application/json; charset=UTF-8
Date: Tue, 01 Jul 2014 15:05:13 GMT
Server: Restlet-Framework/2.1.7
Set-Cookie: k=546f71445bf1bacd60a3f715d0250267
Set-Cookie: p=http://compflow.pt/flowOntology/admin
Vary: Accept-Charset, Accept-Encoding, Accept-Language, Accept
对http://127.0.0.1:8000/api/person
的调用是通过使用JQuery的AJAX调用执行的,如下所示:
$.ajax({
url: '/api/person',
type:'POST',
accepts : "application/json",
contentType : "application/json",
processData : false,
dataType : "text",
data: JSON.stringify(data),
success: function (data) {
data = JSON.parse(data);
sessionStorage["userData"] = JSON.stringify(data.data);
if(callback) callback();
},
error: function(data) {
$('.alert-error').text(data).show();
}
});
但是,如果我尝试执行GET(直接通过浏览器)到地址http://127.0.0.1:8000/job
,则不会发送cookie。 Cookie标头未在请求中设置。
因为它不是跨域请求,并且没有设置关于cookie的路径和域的限制(我已经尝试将它们设置为" /"和" {{1}我无法了解可能导致此问题的原因。我非常感谢你能给我的所有帮助。
答案 0 :(得分:0)
奇怪的是,HTTP服务器连接器的类型改变了代码的行为。我已经为此输入了一个问题(https://github.com/restlet/restlet-framework-java/issues/927)。
作为一种解决方法,我建议您确定路径,如下所示:
getCookieSettings().add(new CookieSetting(0, "k", key, "/", null));
NB:在ServerResource内部;您可以使用快捷方式" getCookieSettings()",而不是" getResponse()。getCookieSettings()"。