2009-05-06 9 views
2

URIサブセットに従ってユーザーを識別する必要があります。それは次のパターンhttp://[email protected]:port/pathを持っています。URI userinfoコンポーネントを使用した認証http:// userinfo @ hostname:サーブレット内のポート/パス

java.net.URI(http://java.sun.com/j2se/1.4.2/docs/api/java/net/URI.html)の実装はURIを表します。しかし、サーブレットでは、 "userinfo" URIのコンポーネントを含むURL/URIを取得することができませんでした。私はメソッドHttpServletRequest.getRequestURL()が完全なURLを返すと思ったが、 "userinfo"コンポーネントが抑制されているか無視されている段階がありました。

Firefoxの代わりにcurlを使用してサーブレットをリクエストすると、ヘッダにhttp基本認証が追加されることに気付きました。したがって、HTTPクライアントの実装に関連する可能性がありますか?呼び出し側は "user-info"コンポーネントを抑制できますか?

次のコードは、ヘッダーを繰り返して、ユーザー情報コンポーネントを読み取ろうとしています。

@SuppressWarnings("unchecked") 
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    // 
    try { 

     PrintWriter out = response.getWriter(); 

     String header; 
     for (Enumeration e = request.getHeaderNames(); e.hasMoreElements();) { 
      header = e.nextElement().toString(); 
      out.println(header + ": " + request.getHeader(header)); 
     } 

     URI uri = new URI(request.getRequestURL().toString()); 

     out.println("request uri: " + request.getRequestURI()); 
     out.println("request url: " + request.getRequestURL()); 
     out.println("userinfo: " + uri.getUserInfo()); 
    } catch (URISyntaxException e) { 
     e.printStackTrace(); 
    } 

} 

ありがとうございます!

答えて

1

ユーザー名とパスワードは、URLの一部ではなく、HTTP認証の一部として渡されます。特に、ブラウザーは、401の許可されていない応答を介して要求されない限り、それを送信しません。

ここでサーブレットでHTTP認証を実装する方法の例をいくつか見ることができます:http://docstore.mik.ua/orelly/java-ent/servlet/ch08_01.htm

関連する問題