如何在Java 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的标头值?

我解决了我的问题

 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链接很有用。

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

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

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

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

希望它能帮到你。 蒂埃里

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

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

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

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

自从:

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

返回所有标题信息和

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

获取位置

你将如何处理解析ID?

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

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

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