Restlet 1.1 访问控制 Header 问题
Restlet 1.1 Access Control Header Issue
我正在开发基于 restlet 1.1.1 的 restlet
我面临的问题是设置 'Access-Control-Allow-Origin' header 以允许跨域请求。我尝试了一些没有用的东西。
方法一,把header放在acceptRepresentation函数中:
@Override
public void acceptRepresentation( Representation resetEntity ) {
Form headers = (Form)getResponse().getAttributes().get("org.restlet.http.headers");
if (headers == null) {
headers = new Form();
getResponse().getAttributes().put("org.restlet.http.headers", headers);
}
headers.add("Access-Control-Allow-Origin","https://origin.server.edu");
//other code here for actual resource logic...
}
这没有用。尝试使用 JQuery 发送请求时,我仍然收到错误消息:
jQuery.ajax({
type: "POST",
contentType: "application/json",
url: "https://test.servername.edu/cas/cas-rest-api/reset/",
data: JSON.stringify("{\"uname\" : \"someone\", \"attr\":\"dataElement\" }"),
dataType: "json",
crossDomain: true
})
.done(function(data){
console.log("Success");
alert(data);
})
.fail(function(data){
console.log("failure");
console.log(data);
alert(data);
});
这没有用。所以我注意到资源 class 中有一个 init 函数。我想我会尝试将我的代码放在那里看看这是否会改变这种情况。
@Override
public void init(Context context, Request request, Response response ){
Form headers = (Form)response.getAttributes().get("org.restlet.http.headers");
if (headers == null) {
headers = new Form();
response.getAttributes().put("org.restlet.http.headers", headers);
}
headers.add("Access-Control-Allow-Origin","https://origin.server.edu");
super.init(context, request, response);
}
没有。也没用。我在这里错过了什么?我在哪里设置这个 header?
感谢您的回复。在对问题进行一些分析后,我发现我需要配置 Spring 以允许在 web.xml 文件中对我的 restlet 进行选项请求,如下所示:
<servlet>
<servlet-name>ccrest</servlet-name>
<servlet-class>com.noelios.restlet.ext.spring.RestletFrameworkServlet</servlet-class>
<init-param>
<param-name>dispatchOptionsRequest</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
我正在开发基于 restlet 1.1.1 的 restlet
我面临的问题是设置 'Access-Control-Allow-Origin' header 以允许跨域请求。我尝试了一些没有用的东西。
方法一,把header放在acceptRepresentation函数中:
@Override
public void acceptRepresentation( Representation resetEntity ) {
Form headers = (Form)getResponse().getAttributes().get("org.restlet.http.headers");
if (headers == null) {
headers = new Form();
getResponse().getAttributes().put("org.restlet.http.headers", headers);
}
headers.add("Access-Control-Allow-Origin","https://origin.server.edu");
//other code here for actual resource logic...
}
这没有用。尝试使用 JQuery 发送请求时,我仍然收到错误消息:
jQuery.ajax({
type: "POST",
contentType: "application/json",
url: "https://test.servername.edu/cas/cas-rest-api/reset/",
data: JSON.stringify("{\"uname\" : \"someone\", \"attr\":\"dataElement\" }"),
dataType: "json",
crossDomain: true
})
.done(function(data){
console.log("Success");
alert(data);
})
.fail(function(data){
console.log("failure");
console.log(data);
alert(data);
});
这没有用。所以我注意到资源 class 中有一个 init 函数。我想我会尝试将我的代码放在那里看看这是否会改变这种情况。
@Override
public void init(Context context, Request request, Response response ){
Form headers = (Form)response.getAttributes().get("org.restlet.http.headers");
if (headers == null) {
headers = new Form();
response.getAttributes().put("org.restlet.http.headers", headers);
}
headers.add("Access-Control-Allow-Origin","https://origin.server.edu");
super.init(context, request, response);
}
没有。也没用。我在这里错过了什么?我在哪里设置这个 header?
感谢您的回复。在对问题进行一些分析后,我发现我需要配置 Spring 以允许在 web.xml 文件中对我的 restlet 进行选项请求,如下所示:
<servlet>
<servlet-name>ccrest</servlet-name>
<servlet-class>com.noelios.restlet.ext.spring.RestletFrameworkServlet</servlet-class>
<init-param>
<param-name>dispatchOptionsRequest</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>