我需要在Java Servlet中记录链接到我的站点的URL。
答案 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。用户代理(即:浏览器)可以完全控制这些标头而不是用户。