如何提取Spring MVC Controller中的IP地址获取调用?

我正在处理Spring MVC控制器项目,其中我正在从浏览器进行GET URL调用 –

以下是我通过浏览器进行GET调用的url –

http://127.0.0.1:8080/testweb/processing?workflow=test&conf=20140324&dc=all 

下面是在浏览器打到电话后的代码 –

 @RequestMapping(value = "processing", method = RequestMethod.GET) public @ResponseBody ProcessResponse processData(@RequestParam("workflow") final String workflow, @RequestParam("conf") final String value, @RequestParam("dc") final String dc) { System.out.println(workflow); System.out.println(value); System.out.println(dc); // some other code } 

问题陈述:-

现在有什么办法,我可以从一些头提取IP地址? 这意味着我想知道从哪个IP地址来,呼叫即将到来,这意味着谁在URL上面呼叫,我需要知道他们的IP地址。 这可能吗?

解决scheme是

 @RequestMapping(value = "processing", method = RequestMethod.GET) public @ResponseBody ProcessResponse processData(@RequestParam("workflow") final String workflow, @RequestParam("conf") final String value, @RequestParam("dc") final String dc, HttpServletRequest request) { System.out.println(workflow); System.out.println(value); System.out.println(dc); System.out.println(request.getRemoteAddr()); // some other code } 

HttpServletRequest request添加到您的方法定义中,然后使用Servlet API

Spring的文档在这里说

15.3.2.3支持的处理程序方法参数和返回types

 Handler methods that are annotated with @RequestMapping can have very flexible signatures. Most of them can be used in arbitrary order (see below for more details). Request or response objects (Servlet API). Choose any specific request or response type, for example ServletRequest or HttpServletRequest 

我在这里迟到,但这可能会帮助寻找答案的人。 通常servletRequest.getRemoteAddr()起作用。

在很多情况下,您的应用程序用户可能正通过代理服务器访问您的Web服务器,或者您的应用程序可能位于负载平衡器后面。

所以你应该在这种情况下访问X-Forwarded-For http头来获取用户的IP地址。

例如String ipAddress = request.getHeader("X-FORWARDED-FOR");

希望这可以帮助。

您可以从RequestContextHolder静态获取IP地址,如下所示:

 HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()) .getRequest(); String ip = request.getRemoteAddr();