2

URI サブセットに従ってユーザーを識別する必要があります。以下 の パターン が あ るhttp://userinfo@hostname:port/path

java.net.URI実装は 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();
    }
   
}

前もって感謝します!

4

1 に答える 1

1

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

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

于 2009-05-06T04:59:32.813 に答える