Мне нужно идентифицировать пользователей по подмножеству 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();
}
}
Заранее спасибо!