HttpServletRequest - як отримати відповідну URL-адресу?


144

Мені потрібно ввести URL-адреси, що посилаються на мій сайт, в сервлеті Java.


Чи правильно я зрозумів, що якщо я знайшов ваш сайт в google і відкрив посилання, то ви ввійшли в систему "google.com"?
Роман

Відповіді:


310

Він доступний у заголовку HTTPreferer . Ви можете отримати його в сервлеті наступним чином:

String referrer = request.getHeader("referer"); // Yes, with the legendary misspelling.

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

Для зацікавлених можна ознайомитись з інформацією про неправильну написання у Вікіпедії .


2
чи має значення "референт" та "референт"?
ante.sabo

7
@ante: ні, пошук заголовка не чутливий до регістру.
BalusC

2
Зауважте, що будь-який заголовок може бути null.
rds

@BalusC Що робити, якщо мені потрібні два попередні URL-адреси? Можливо ?
Angel Cuenca

26

Насправді це: request.getHeader("Referer")або ще краще, і щоб бути на 100% впевненим request.getHeader(HttpHeaders.REFERER), де є HttpHeaderscom.google.common.net.HttpHeaders


11
З документів Java EE API для методу getHeader(String name)(цитата):"The header name is case insensitive."
informatik01

7
все-таки піднести подання для посилання HttpHeaders. Ще один хороший Apache HTTP:org.apache.http.HttpHeaders
Баретт

16

URL - адреса передається в запиті: request.getRequestURL().

Якщо ви маєте на увазі інші сайти, які посилаються на вас? Ви хочете захопити HTTP Referrer, що ви можете зробити, зателефонувавши:

request.getHeader("referer");

6

Як усі вже згадували

request.getHeader("referer");

Я хотів би додати ще детальну інформацію про аспект безпеки заголовка реферала на відміну від прийнятої відповіді. У відкритих аркушах безпеки проекту Open Web Application Project ( OWASP ) у розділі чіт-листів запобігання підробці веб-сайтів (CSRF) згадується важливість заголовка реферала .

Що ще важливіше для цієї рекомендованої перевірки того ж самого оригіналу, деякі заголовки запитів HTTP не можуть бути встановлені JavaScript, оскільки вони знаходяться у списку заборонених заголовків. Тільки самі веб-переглядачі можуть встановлювати значення для цих заголовків, роблячи їх більш надійними, оскільки для зміни їх не можна використовувати навіть вразливість XSS.

Рекомендована перевірка джерела джерела посилається на три з цих захищених заголовків: Origin, Referer та Host, що робить його досить сильною обороною CSRF.

Ви можете посилатися на список заборонених заголовків тут . Агент користувача (тобто браузер) має повний контроль над цими заголовками, а не користувачем.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.