Аутентификация с использованием URI-компонента userinfo http://userinfo@hostname:port/path в сервлете - PullRequest
2 голосов
/ 06 мая 2009

Мне нужно идентифицировать пользователей по подмножеству URI. Он имеет следующий шаблон http://userinfo@hostname:port/path.

Реализация java.net.URI (http://java.sun.com/j2se/1.4.2/docs/api/java/net/URI.html)) представляет URI. Однако в сервлете мне не удалось получить URL / URI, содержащий компонент URI «userinfo». Я думал, что метод HttpServletRequest. getRequestURL () возвращает полный URL-адрес, но на некотором этапе компонент userinfo подавляется или игнорируется.

Я понял, что при запросе сервлета, использующего curl вместо Firefox, он добавляет в заголовок базовую авторизацию http. Таким образом, это может быть связано с реализацией клиента HTTP? Invoker может подавить компонент "user-info"?

Следующий код просто перебирает заголовок и пытается прочитать компонент 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 Ответ

1 голос
/ 06 мая 2009

Имя пользователя и пароль передаются как часть аутентификации HTTP, а не как часть URL. В частности, браузер никогда не отправит его, если его не попросят через 401 несанкционированный ответ.

Некоторые примеры реализации HTTP-аутентификации в сервлете вы можете увидеть здесь: http://docstore.mik.ua/orelly/java-ent/servlet/ch08_01.htm

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...