如何在Java Restlet中访问请求的标头值?

时间:2013-07-19 10:22:55

标签: java web-services rest request restlet

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

为此我想保护一些web服务免受未经授权的客户端的攻击。所以我写了Filter类。在该Filter类中,我想获取Request的标题。但我收到以下错误 -

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的标头值?

5 个答案:

答案 0 :(得分: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链接很有用。

答案 1 :(得分:2)

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

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

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

否则,既然你谈到安全性,Restlet提供了一个支持这种方面的通用API(参见ChallengeAuthenticator,Verifier,Enroler类)。

希望它对你有所帮助。 亨利

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:0)

您将如何处理从客户端请求中解析GET标头中的ID? 你会以同样的方式接近这个吗?

自:

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

返回所有标题信息和

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

获取位置

你将如何处理解析ID?

答案 4 :(得分:0)

Series headers = (Series) getRequestAttributes().get("org.restlet.http.headers");
String origin = headers.getFirstValue("Origin");`

这只是获取Origin标头的一个示例。如果您想获取位置,只需更改为headers.getFirstValue(“Location”);

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