Как получить клиентский IP на сервере dart shelf-rpc
У меня есть приложение веб-службы dart, написанное с использованием Shelf и Rpc apis.
Мне нужно проверить Ip клиента внутри моих методов API, но я не могу понять, как.
Метод контекста не содержит свойство HttpRequest.contentInfo.
Более того, объект запроса полки также не содержит его, поэтому функция промежуточного программного обеспечения будет бесполезна.
У кого-нибудь есть идея, как решить эту проблему?
2 ответа
Вы можете сделать это, используя промежуточную концепцию полки. Вы можете просмотреть пример промежуточного программного обеспечения регистратора здесь: https://www.crossdart.info/p/shelf/0.6.5+2/src/handlers/logger.dart.html. Пример использования регистратора можно найти здесь: https://github.com/dart-lang/shelf
В промежуточном программном обеспечении вы можете найти IP-адрес в объекте запроса (который расширяет сообщение). Сообщение дает вам доступ к необработанному заголовку http, который содержит IP-адрес. Оттуда вы можете решить, как вы хотите обработать неверный IP-адрес (выдать ошибку, вернуть запрос с ошибкой и т. Д.).
Вот как я получаю IP-адрес клиента:
FutureOr<Response> handleWs(Request request) {
final clientAddress = (request.context['shelf.io.connection_info'] as
HttpConnectionInfo?)?.remoteAddress.address;
}
запрос является параметром, когда вы обрабатываетеshelf_router.Router()
, так:
final routerHandler = shelf_router.Router()
..get('/message', (request) => handleWs(request))