如何在春季MVC控制器中获取呼叫中的IP地址?

2022-08-31 08:37:09

我正在研究Spring MVC控制器项目,其中我正在从浏览器进行GET URL调用 -

以下是我从浏览器进行GET调用的网址 -

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地址。这可以做到吗?


答案 1

解决方案是

@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
    }

添加到方法定义中,然后使用 Servlet APIHttpServletRequest request

春季文献在这里

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

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

答案 2

我在这里迟到了,但这可能有助于寻找答案的人。通常有效。servletRequest.getRemoteAddr()

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

因此,在这种情况下,您应该访问X-Forwarded-For http标头以获取用户的IP地址。

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

希望这有帮助。