Restlet 1.1访问控制标题问题

时间:2015-06-25 16:00:17

标签: java jquery restlet

我正在研究基于restlet 1.1.1构建的restlet

我面临的问题是设置'Access-Control-Allow-Origin'标头以允许跨域请求。我尝试了一些不起作用的东西。

方法一,将标题放在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);
});

这不起作用。所以我注意到资源类中有一个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);
}

不。也没用。我在这里错过了什么?我在哪里设置此标题?

1 个答案:

答案 0 :(得分:1)

感谢您的回复。经过对问题的一些分析后发现我需要配置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>