5

私のgrailsアプリケーションでは、HttpSessionListener以下に示すように、セッションの作成をリッスンするためのインターフェースを実装しました。

class MyHttpSessionListener implements HttpSessionListener {

    public void sessionCreated(HttpSessionEvent event) {
        log.info "***************** Session created: id= ${event.getSession()?.id}"
    }
}

ここで、セッションの作成を担当するIPアドレスをログに記録したいと思います。

どうやってやるの?

4

3 に答える 3

9

RequestContextHolderにアクセスして、値を取得できます

String ipAddr = ((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes())
           .getRequest().getRemoteAddr();
于 2010-08-30T01:10:38.940 に答える
2

私の知る限り、HttpSessionListenerインターフェースを使用することはできません。

「ServletRequest.getRemoteAddr()」からIPアドレスを取得してログに記録できますが、HttpSessionListenerまたはHttpSessionEventからのサーブレット要求にアクセスすることはできません。

最良のアイデアは、IPアドレスを取得し、まだ存在しない場合はそれをセッション属性として設定するjavax.servlet.Filterを用意することです。(まだ存在しない場合は、ロギングを行うこともできます)。

于 2010-08-30T01:01:38.187 に答える
2

このインターフェイスは、HttpSessionListener:ServletRequestListenerでも使用できます。次のように:requestInitialized()を実装できます。

@Override
public void requestInitialized(ServletRequestEvent servletRequestEvent) {
    this.request = (HttpServletRequest) servletRequestEvent.getServletRequest();
}

それは正常に機能しています、リクエストオブジェクトはあなたにリモートアドレスをもたらすことができます、それを行うための方法があります

于 2011-10-13T10:27:23.613 に答える