我們計劃將我們的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。 –