HttpServletRequest-如何获得引用的 URL?

我需要在 JavaServlet 中记录链接到我的站点的 URL。

162933 次浏览

它在 HTTP referer头文件中可用。您可以在 servlet 中获得它,如下所示:

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

然而,您需要认识到这是一个客户端控制的值,因此可以欺骗到完全不同的东西,甚至删除。因此,无论它返回什么值,您都不应该将其用于后端的任何关键业务流程,而只能用于表示控制(例如,隐藏/显示/更改某些纯布局部件)和/或统计。

对于感兴趣的,有关拼写错误的背景可以在 维基百科中找到。

URL 在请求中传递: request.getRequestURL()

如果你指的是其他链接到你的网站?您希望捕获 HTTP Referrer,这可以通过调用:

request.getHeader("referer");

实际上是: request.getHeader("Referer"), 或者更好,百分百确定, request.getHeader(HttpHeaders.REFERER), HttpHeader 在哪里是 com.google.common.net.HttpHeaders

就像大家说的那样

request.getHeader("referer");

我想添加一些关于 推荐人头部安全方面的更多细节与接受的答案相反。在 OpenWebApplicationSecurityProject (OWASP)备忘单中,在 防止跨站请求伪造(CSRF)小抄下提到了 推荐人头的重要性。

对于这个推荐的同源检查,更重要的是,许多 HTTP 请求头不能由 JavaScript 设置,因为它们在“禁止”头列表中。只有浏览器本身可以为这些头设置值,使它们更可靠,因为甚至不能使用 XSS 漏洞来修改它们。

这里推荐的源代码检查依赖于其中的三个 保护头: 起源,引用,和主机,使它成为一个美丽的 强大的 CSRF 防御系统。

你可以参考 这里禁止标题列表。用户代理(即: 浏览器)对这些头有完全的控制权,而不是用户。