2012-03-19 13 views
0

私は素朴な疑問を持っていますが、...私は本当に処理する方法がわからないこれは、JBoss AS 7、Java EE 6クライアントIPを取得する方法は?

を私は長い時間を探していますが、私はいつも同じ答えを見つけた私はのIPアドレスを取得したいです彼は自分のアプリケーションに登録するクライアント、...

は、私はこのようなものが見つかりました:

@ManagedBean(name="testController") 
    @SessionScoped 
    public class TestController implements Serializable { 

     private static final long serialVersionUID = -3244711761400747261L; 
     protected final HttpServletRequest req; 

     public TestController(HttpServletRequest req) { 
      this.req = req; 
      System.out.println(this.req.getRemoteAddr().toString()); 
     } 
    } 

をしかし、私はコンストラクタでのHttpServletRequestを持っていない.... か私にはありませんそれを使用する方法を知っている、私はすべてエラーを得る....

答えて

4

ExternalContext#getRequest()から入手できます。

public TestController() { 
    HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest(); 
    System.out.println(request.getRemoteAddr()); 
} 

最初の試みで大きな概念的な間違いがあることに注意してください。現在のHTTP要求をセッションスコープの管理対象Beanのプロパティとして割り当てようとしています。 HTTPリクエストインスタンスは、現在のHTTPレスポンスの終わりまでに期限切れとなり、セッションスコープBeanが作成されたときの最初のリクエストに続く後続のリクエストでメソッドにアクセスしようとすると、すべての色で例外をスローします。

1

私はSeam Solderプロジェクトでも使われている別のアプローチを考えています。サーブレットリクエストを取得し、アプリケーションスコープのプロデューサを介して利用可能にするサーブレットフィルタを作成します。対応するsource code of the solder projectを参照してください。

関連する問題