HttpServletRequest.getRemoteAddr () возвращающийся неправильно обращаются [копируют]

Очевидная случайность повреждения памяти очень походит на проблему синхронизации потока - ошибка воспроизводится в зависимости от скорости машины. Если объекты (блоки памяти) являются общими для потоками и синхронизацией (критический раздел, взаимное исключение, семафор, другой), примитивы не находятся на на класс (на объект, на класс) основание, то возможно прийти к ситуации, где класс (блок памяти) удален / освобожденный, в то время как используемый или использовал, после того, как удалено / освобожденный.

Как тест, для которого, Вы могли добавить примитивы синхронизации к каждому классу и методу. Это сделает Ваш код медленнее, потому что много объектов должны будут ожидать друг друга, но если это устранит повреждение "кучи", Ваша проблема повреждения "кучи" станет оптимизацией кода один.

9
задан Greg Charles 19 November 2009 в 22:36
поделиться

2 ответа

Вы можете «видеть насквозь» прокси-сервер и получить адрес исходного запрашивающего из заголовка X-FORWARDED-FOR , используя

request.getHeader( "X-FORWARDED-FOR" );

Я полагаю, прокси-сервер неверно работает между исходный запросчик и ваш сервер могут привести к потере истинного значения.

Ссылка: описание в википедии X-FORWARDED-FOR

7
ответ дан 4 December 2019 в 21:10
поделиться

Что вам нужно, так это чтобы ваш обратный прокси-сервер передавал исходный IP-адрес в специальном заголовке, например x-forwarded-for . Затем вы можете получить этот заголовок из своего сервлета. Кроме того, вы можете изменить свой файл журнала для регистрации этого IP-адреса. Пример:

    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"  
           prefix="access_log." suffix=".txt"
           fileDateFormat="yyyy-MM-dd"
           pattern="%{x-forwarded-for}i %l - %t &quot;%r&quot; %s %b &quot;%{referer}i&quot; &quot;%{user-agent}i&quot;"
           resolveHosts="false"/>
3
ответ дан 4 December 2019 в 21:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: