HttpServletRequest - 如何获取引用URL?

时间:2010-04-15 21:08:04

标签: java servlets

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

4 个答案:

答案 0 :(得分:293)

可在HTTP referer header中找到。您可以按如下方式在servlet中获取它:

String referrer = request.getHeader("referer"); // Yes, with the legendary misspelling.
但是,您需要意识到这是一个客户端控制的值,因此可能被欺骗到完全不同甚至删除的东西。因此,无论它返回什么值,您都不应该将它用于后端的任何关键业务流程,而只能用于表示控制(例如隐藏/显示/更改某些纯布局部分)和/或统计数据。

有兴趣的话,有关拼写错误的背景可以在Wikipedia

中找到

答案 1 :(得分:23)

实际上它是: request.getHeader("Referer"), 甚至更好,并且100%肯定, request.getHeader(HttpHeaders.REFERER), 其中HttpHeaders是com.google.common.net.HttpHeaders

答案 2 :(得分:15)

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

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

来执行此操作
request.getHeader("referer");

答案 3 :(得分:6)

正如所有人都提到的那样

request.getHeader("referer");

我想添加一些关于 referer 标题的安全方面的详细信息,与已接受的答案形成对比。在Open Web Application Security Project(OWASP)备忘单中,Cross-Site Request Forgery (CSRF) Prevention Cheat Sheet下面提到了 referer 标题的重要性。

  

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

     

此处推荐的Source Origin检查依赖于其中的三个   受保护的标题:Origin,Referer和Host,使它变得漂亮   强大的CSRF防御本身。

您可以参考Forbidden header list here。用户代理(即:浏览器)可以完全控制这些标头而不是用户。