HttpServletRequest – 如何获取引荐url?

我需要在Java Servlet中logging链接到我的网站的URL。

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

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

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

对于感兴趣的,有关拼写错误的背景可以在Wikipedia中find。

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

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

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

 request.getHeader("referer"); 

正如所有人提到的那样

 request.getHeader("referer"); 

我想添加一些关于引用标题的安全性方面的细节,而不是接受的答案。 在开放Web应用安全项目( OWASP )备忘单中,在跨站请求伪造(CSRF)预防备忘单中提到了引用头的重要性。

更重要的是对于这个推荐的Same Origin校验,一些HTTP请求头文件不能由JavaScript设置,因为它们位于“禁止”头文件列表中。 只有浏览器本身可以为这些头文件设置值,这使得它们更加值得信赖,因为即使是XSS漏洞也不能用来修改它们。

这里推荐的源代码检查依赖于以下三个受保护的头文件:Origin,Referer和Host,使其成为一个非常强大的CSRF防御。

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