2011-12-05 14 views
1

私はジャージーとRESTfulなWebサービスを足す、これはサンプルコードでいます:Jersey HTTP認証:jerseyの快適なURLでHTTP認証にアクセスする方法はありますか?

@GET 
@Produce(MediaType.APPLICATION_JSON) 
public String findItems(){ 

... 
} 

とFindItem関数のURLはlocalhostです:メソッドは、HTTP認証情報(ダイジェストまたは基本)を確認する必要があり 8080 /アイテムのこのurlをexcuteする前に、どのようにurlリクエストから認証にアクセスするのですか?

答えて

2

私はこれをコントローラ自体には入れませんが、保護したいリソースクラスの周りのcom.sun.jersey.spi.coni.ContainerRequestFilterに入れますが、基本的な考え方を与えるべきです。

@Context 
private HttpServletRequest request; 

@GET 
@Produce(MediaType.APPLICATION_JSON) 
public String findItems(){ 
    String auth = request.getHeader("authorization"); 
    if (auth != null) { 
     String basic_prefix = "Basic "; 
     if (auth.startsWith(basic_prefix)) { 
      String auth_data = new String(Base64.decode(auth.substring(basic_prefix.length()))); 
      String [] user_and_key = auth_data.split(":", 2); 
      // user and password available here 
     } else { 
      // reject access 
     } 
    } else { 
     // reject access 
    } 
}     
+0

ありがとうございます。ダイジェスト認証にアクセスする方法を教えてください – user996505

0

通常認証はコンテナによって処理されて、あなただけのURIを保護すべきと認証の種類が必要とされるものを示すために、web.xmlに対応する制約を追加する必要があります。次にジャージーでは、リソースに注入できるSecurityContextからロールとプリンシパル情報を取得できます。