2012-03-07 21 views
1

私は同様の質問がされていることを知っていますが、すべてが以前に尋ねられているので、私は新しいスレッドを開始します。これを使用して、私はGrailsの内のIPアドレスを取得しようとしているGrailsでIPアドレスを取得する

は、私が孤立して、要求のいずれかの方法を使用している場合は、それが正常に動作

def String ipAddress ; 

ipAddress = request.getHeader("Client-IP") 

if (ipAddress == "") 
request.getHeader("X-Forwarded-For") 

if (ipAddress == "") 
request.getRemoteAddr() 

、しかし二回目は、私がリクエストメソッドIにアクセスJavaハッシュマップエラーを取得します。例:

if this map contains a mapping from a key 
* {@code k} to a value {@code v} such that {@code (key==null ? k==null : 
* key.equals(k))}, then this method returns {@code v}; otherwise 
* it returns {@code null}. (There can be at most one such mapping.) 

いずれかの提案があります。

+0

あなたは 'request.remoteHost'を試しましたか? –

+0

このエラーをどのように修正しましたか?そのようなプロパティはありません:リクエスト?リクエストパッケージ/依存関係をどのようにインポートしますか?このエラーをグーグルは助けにはならなかった。 –

+0

コードは正しく見えませんが、def文字列はdefまたはStringでなければなりません。また、変数ipAddress = request.getを割り当てる必要があります。 –

答えて

1

マリウスは、私は、コントローラのアクションに入れて、あなたのコードは、いくつかの小さな変更を加えましたし、出力を得る:

null 
null 
0:0:0:0:0:0:0:1 

コード:

 def ipAddress = request.getHeader("Client-IP") 
     log.info ipAddress 
     if (!ipAddress) 
      log.info request.getHeader("X-Forwarded-For") 

     if (!ipAddress) 
      log.info request.remoteAddr 

私は変化が自己であることを望みます説明する?

+0

こんにちはSteveありがとうございました。私はあなたが提供したコードを、成功なしに試しました。これはクラッシュしませんが、要求オブジェクトに2回目にアクセスすると(デバッグモードのとき)、Reference.javeファイルに移動して残りのコードをスキップします。私はGrails 2.01を使用しています。 – marius

+1

あなたはこれをどこから実行していますか?コントローラーなど?あなたのビルドを掃除しようとすると、時には "wierdness"がなくなります – Steve

+0

このコードは私を救ったのです。素晴らしい仕事! – JavaDev

0

私は次のコードを更新したいと思います:

def ipAddress = request.getHeader("Client-IP") 
    log.info ipAddress 
    if (!ipAddress){ 
     ipAddress=request.getHeader("X-Forwarded-For") 
     log.info "Used X-Forwarded-For header: $ipAddress" 
    } 
    if (!ipAddress){ 
     ipAddress=request.remoteAddr 
     log.info "Used RemoteAddr attribute: $ipAddress" 
    } 

そうでない場合は、最後の状態が不正な動作につながります。