我们计划将我们的UI代码与我们的春天宁静的apis分开,因为我们希望为不同的客户端定制ui。我们有一个休息api,它根据用户名和密码提供身份验证用户。实际上,在我的UI包中,我有一个弹簧控制器,它调用这个api让用户使用Spring RestTemplate进行身份验证,并根据结果返回适当的页面。如果有人提供三次错误的用户名密码,身份验证API将使用请求中的IP地址并阻止IP地址24小时。但问题是我每次调用这个api时,都会得到我的服务器的IP地址,我的UI包被部署在这里,我想这是正确的行为,因为调用者是我的UI服务器。那么有没有一种方法可以在我的UI包中获取调用者的IP地址,并将其设置为我对api所做的请求。有没有一种方法可以在RestTemplate请求中设置实际的呼叫者的IP。如何在春季发送呼叫者的IP地址RestTemplate
0
A
回答
1
您可以用做HttpServletRequest的,你的API方法应该参数HttpServletRequest的定义。
您的API方法应该是这样的:
@RequestMapping(value = "/myApiPath", method = RequestMethod.GET)
public void myApiMethod(MyObject myobject, final HttpServletRequest request) throws IOException {
String ipAddress=getIpAddressOfRequest(request); // get Ip address
}
然后用HttpServletRequest的请求用于获取IP地址,如下图所示:
public static String getIpAddressOfRequest(final HttpServletRequest request) {
String remoteAddr = "";
if (request != null) {
remoteAddr = request.getHeader("X-FORWARDED-FOR");
if (remoteAddr == null || "".equals(remoteAddr)) {
remoteAddr = request.getRemoteAddr();
}
}
return remoteAddr;
}
即使你可以对域名的条件通过使用以下代码获取服务器名称:
public static String getProtocolHostnameAndPort(final HttpServletRequest request) {
String protocol = request.getProtocol().split("/")[0].toLowerCase();
String hostname = request.getServerName();
int port = request.getServerPort();
StringBuilder result = new StringBuilder(protocol + "://" + hostname);
if (port != 80) {
result.append(":").append(port);
}
return result.toString();
}
相关问题
- 1. 如何在ejb呼叫中获得呼叫IP地址?
- 2. 如何在春季集成中获取发件人IP地址?
- 3. 如何发布从IP地址,通过HTTP服务器呼叫角2
- 4. 多播IP地址 - 阻止在呼叫recvfrom
- 5. 呼叫从地址栏
- 6. 如何获得作者在wordpress中发布的IP地址
- 7. 春季安全从相同的IP地址登录几个
- 8. Debian发送ip地址在启动(sheevaplug)
- 9. 发送邮件的IP地址与node.js
- 10. 提取呼叫者响应的地址部分
- 11. 哪些是parse.com ip地址来限制呼叫
- 12. 为什么iOS网络服务呼叫需要IP地址?
- 13. Winsock发送呼叫很慢
- 14. IP地址所有者
- 15. 春季Android RestTemplate能否返回List?
- 16. java udp从特定IP地址发送
- 17. 使用RestTemplate到呼叫控制器
- 18. 如何为sinch javascript_api-to-PSTN呼叫设置呼叫者ID?
- 19. 在Pyro4应用程序中获取呼叫者的IP
- 20. 在春季测试发送邮件
- 21. 通过java中的IP地址发送HTTP GET请求到目标IP地址
- 22. 在Rest API中发送呼叫
- 23. 如何将短信发送到我知道IP地址的PC?
- 24. 如何通过特定的IP地址发送httpwebrequests
- 25. 如何从特定的IP地址发送电子邮件?
- 26. 我可以在LCDS服务呼叫中获取客户端的IP地址吗?
- 27. SIP呼叫的媒体地址可以在呼叫中改变吗?
- 28. 如何查看UploadValues发送包括正在发送的邮件的呼叫
- 29. 如何在并发呼叫时拨打SIP呼叫会话
- 30. 如何将消息发送给SignalR中的唯一呼叫者客户端?
感谢您的快速回复。实际上,UI和后端都运行在不同的服务器上,我的流程就像Browser将在UI包中向我的控制器发出请求,并且控制器将再次将凭证发布到后端包中的API,这将实际验证用户身份并返回响应。与您的建议我可以得到调用者(浏览器)在UI控制器的IP,但不是在实际的Api。在后端Api我得到我的用户界面包服务器的IP,我不能阻止,如果三个错误的尝试登录我需要阻止实际上已经打电话的IP。 –