2013-07-19 110 views
4

我正在使用Restlet Java开发Web服务。如何在Java Restlet中访问请求的标头值?

为此,我想保护一些Web服务免受未经授权的客户端的侵害。所以我写了Filter类。在该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请求的标头值?

+0

您使用的是什么版本的Restlet? – Syon

+0

我正在使用Restlet v2.0 – Deepu

回答

2

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

例如,如果你想设置的响应Location头,你添加以下代码:

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

否则,因为你谈论安全,的Restlet提供了一个通用的API来支持这些方面(见类ChallengeAuthenticator,Verifier,Enroler)。

希望它可以帮助你。 Thierry

+0

感谢你的回答,我会试试这个 – Deepu

0

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

由于:

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

返回所有的头信息和

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

得到的位置(一个或多个)

你会如何处理解析出ID?

0

如果您正在使用的Restlet 2.1 RC3这是让它

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

这是它的究竟是如何对我的工作方式。上面的答案都没有。我希望它有帮助。

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

这只是一个获取Origin标题的例子。如果你想获得位置,只需改变为headers.getFirstValue(“Location”);

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

+4

你的回答应该包含你的代码的解释和描述它是如何解决问题的。 – AbcAeffchen

+0

这只是获取Origin标题的示例。如果你想获得位置,只需改变为headers.getFirstValue(“Location”); –

+0

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

相关问题