2010-09-02 12 views
7

Mam pojedynczego komponentu bean sprężyny, który jest wywoływany w odpowiedzi na działanie po stronie klienta. Chcę przechwycić niektóre informacje o kliencie (konkretnie adres IP). Zakładam, że najlepszym źródłem tych informacji jest obiekt żądania. Jak uzyskać dostęp do obiektu żądania z poziomu mojego komponentu bean?Jak uzyskać dostęp do ServletRequest z wnętrza pojedynczego fasoli sprężynowej?

Przebacz mi, jeśli to oczywiste pytanie, jestem nowy na wiosnę.

Próbowałem jedno bez powodzenia .:

((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes()) 
.getRequest().getRemoteAddr(); 

Ale to nie powiodło się z IllegalStateException z currentRequestAttributes. Tekst wyjątku sugeruje używając RequestContextListener lub RequestContextFilter

Znalazłem reference aby jak skonfigurować RequestContextListener, ale nadal nie wiem, aby zmienić swoją fasolkę więc mogę uzyskać dostęp do informacji żądania.

Odpowiedz

7

RequestContextListener został dodany do web.xml, a to spowoduje skojarzenie bieżącego żądania z bieżącym wątkiem. To powiązanie wątku jest następnie pobierane przez RequestContextHolder w sposób, w jaki już próbowałeś.

Więc po prostu uderzyć RequestContextListener do web.xml, a kod należy po prostu zacząć pracować:

<listener> 
    <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class> 
</listener> 

RequestContextListener nie są normalnie wymagane w aplikacji MVC wiosny, ponieważ DispatcherServlet zrobi to automatycznie. Zakładam, że to nie jest aplikacja Spring MVC?

+0

Doskonale, to zadziałało! Właśnie miałem nazwę RequestContextListener w web.xml. Do czego służą atrybuty requestDestroyed (ServletRequestEvent)? – wolfcastle

+0

Prawidłowo, to nie jest aplikacja Spring MVC. Niestety, nie widziałem, że po raz pierwszy przeczytałem twoją odpowiedź. – wolfcastle

Powiązane problemy