Получить имя пользователя, указанное в URL от NettyRequest - PullRequest
2 голосов
/ 12 марта 2012

У меня есть HTTP-сервер Netty, и я получаю запросы, которые выглядят так:

https://someuser%40abc.com@server99.route1.abc.com/rest/of/path.xml

И еще раз в моем обработчике у меня есть объект DefaultHttpRequest. Есть ли способ получить 'someuser% 40abc.com' из URL? Должен ли я что-то взломать, чтобы получить это раньше и передать это?

Ответы [ 3 ]

2 голосов
/ 06 июня 2012

Так как пользовательская часть отсутствовала в DefaultHttpRequest в Netty, я попытался отладить Nety HttpDecoder, используя пример сервера Netty Snoop :). Когда я подключаюсь к http://someuser@localhost:8080/rest/path с помощью Chrome / wget, HttpDecoder не получает какую-то пользовательскую часть в качестве заголовка для декодирования, поэтому я проверил дальше, приняв HTTP-запрос, записанный в Wireshark, и у которого также не было какой-то пользовательской части в качестве заголовка.

Причина в том, что клиенты HTTP в основном поддерживают общий синтаксис схемы URI, и они отбрасывают пользовательскую часть и большую часть времени не включают в качестве заголовков (более подробную информацию смотрите в ответе Надима Дуба). Если http-клиент может отправить эти параметры как управляемые пользователем заголовки, доступ к ним можно получить с помощью request.getHeader ("X-user-header").

1 голос
/ 13 марта 2012

Вы хотите спросить, как получить URL от messageReceived ()?

public void messageReceived(final ChannelHandlerContext ctx, final MessageEvent e) throws Exception {
    Object msg = e.getMessage();

    if (msg instanceof HttpRequest) {
        // New request so let's figure our the service to call
        HttpRequest request = (HttpRequest) msg;

        String uri = request.getUri();

        // Use some string functions to extract what you want for the URI
        String username = uri.substring(0, uri.indexOf("@")).substring(8);
    }
}
0 голосов
/ 06 июня 2012

Как упоминал ранее Джестан Нироджан, схема URI поддерживается только клиентом.Сервер HTTP никогда не получит запрос на http://user@host.Кроме того, при использовании учетных данных для проверки подлинности в схеме URI клиент будет передавать эти учетные данные только в том случае, если для них это вызвано.Чтобы уточнить, первый запрос попытается получить страницу без учетных данных пользователя, если сервер потребует их, он вызовет клиента, и, в конце концов, клиент повториет запрос с учетными данными.В противном случае, если клиент не подвергается сомнению, страница будет обслуживаться, и в результате учетные данные не будут передаваться.

...