2010-01-26 37 views
12

Tôi có mã như thế này trong Ruby:Làm thế nào để bạn nhận được địa chỉ IP của khách hàng trong bộ điều khiển Grails?

@clientipaddress = request.env["HTTP_CLIENT_IP"] 
if (@clientipaddress == nil) 
    @clientipaddress = request.env["HTTP_X_FORWARDED_FOR"] 
end 
if (@clientipaddress == nil) 
    @clientipaddress = request.env["REMOTE_ADDR"] 
end 
if (@clientipaddress != nil) 
    comma = @clientipaddress.index(",") 
    if (comma != nil && comma >= 0) 
    @clientipaddress = @clientipaddress[0, comma] 
    end 
end 

Phải mất chăm sóc của tất cả các cách có thể là địa chỉ IP có thể hiển thị lên. Ví dụ, trên máy phát triển địa phương của tôi, không có proxy. Nhưng trong QA và sản xuất các proxy có ở đó, và đôi khi chúng cung cấp nhiều hơn một địa chỉ.

Tôi không cần biết cú pháp Groovy, chỉ những phương thức nào cho tôi tương đương với ba cách khác nhau mà tôi yêu cầu IP ở trên.

Trả lời

34

Tôi nghĩ rằng điều này sẽ là những gì bạn muốn:

  • request.getRemoteAddr()
  • request.getHeader("X-Forwarded-For")
  • request.getHeader("Client-IP")
+0

Cảm ơn đã phản ứng nhanh chóng. – Andrew

+0

Tôi đã thử điều này nhưng nhận được: "Không có tài sản như vậy: yêu cầu" đã dành 1h googlin lỗi này, không có may mắn. Bất cứ ai biết làm thế nào để giải quyết này? –

+1

bạn đang làm điều này bên trong bộ điều khiển? Đây là một tài sản tiêm và nên ở đó. – Neoryder

Các vấn đề liên quan