4

我正在使用Restlet Java开发 Web 服务。

为此,我想保护一些 Web 服务免受未经授权的客户端的攻击。所以我写了Filter类。在那个过滤器类中,我想获取请求的标头 。但我收到以下错误 -

java.lang.ClassCastException: org.restlet.engine.http.HttpRequest cannot be cast to javax.servlet.http.HttpServletRequest

编码是 -

public class MyFilter extends Filter {

    @Override
    protected int beforeHandle(Request request, Response response) {

        int result = STOP;

        HttpServletRequest httpReq = (HttpServletRequest) request;
        String user_token = httpReq.getHeader("auth");

        if(user_token.equals("xyz")) {
            result = CONTINUE;
        }

        return result;
    }
}

请建议我一种在 Java Restlet 中访问 Request 标头值的方法?

4

5 回答 5

3

我解决了我的问题

Form headers = (Form) request.getAttributes().get("org.restlet.http.headers");
String user_token = headers.getFirstValue("Location");

我发现这个http://blog.yudongli.com/2009/12/get-request-header-in-restlet_13.html链接很有用。

于 2013-07-19T15:24:52.600 回答
2

另请注意,Restlet 为 RESTful 应用程序提供了一个 API。这意味着您可以使用此 API 访问标准标头。在大多数情况下,您不需要使用名为“org.restlet.http.headers”的属性。

例如,如果要在响应中设置 Location 标头,请添加以下代码:

getResponse().setLocationRef("http://...");

否则,由于您谈论安全性,Restlet 提供了一个通用 API 来支持此类方面(请参阅 ChallengeAuthenticator、Verifier、Enroler 类)。

希望它可以帮助你。蒂埃里

于 2013-07-19T15:33:31.250 回答
1

如果您使用的是 Restlet 2.1-RC3,这是获取它的方法

 Series<Header> headers = (Series<Header>) getRequestAttributes().get("org.restlet.http.headers");
 String auth = headers.getFirstValue("auth");

这正是它对我有用的方式。上面的答案都没有做到。我希望它有所帮助。

于 2014-10-30T14:34:36.273 回答
0
Series headers = (Series) getRequestAttributes().get("org.restlet.http.headers");
String origin = headers.getFirstValue("Origin");`

这只是获取 Origin 标头的示例。如果要获取 Location,只需更改为 headers.getFirstValue("Location");

与新版本的 Restlet 一样,getRequestAttributes().get() 返回的是 Series 而不是 Form。

于 2015-01-27T00:13:56.900 回答
0

您将如何处理寻求解析来自客户端请求的 GET 标头中的 ID?你会以同样的方式处理这个问题吗?

由于:

Form headers = (Form) getRequestAttributes().get("org.restlet.http.headers");

返回所有头信息和

String hID = headers.getFirstValue("Location");

获取位置

您将如何处理解析 ID ?

于 2014-07-30T17:51:54.663 回答