2013-07-19 111 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。 –

相關問題