/ / Откриване на изтичането на сесията през пролетта 3 / Spring Security 2.0.5 - java, spring, servlets, spring-mvc, spring-security

Откриване на времето за изчакване на сесията 3 / Spring Security 2.0.5 - java, spring, servlets, spring-mvc, spring-security

Имам уеб приложение, работеща под Пролет 3с SpringSecurity 2.0.5. За да покажа на потребителя промените в сайта от последното му посещение, се опитвам да регистрирам времето, когато неговата сесия е унищожена. Затова се регистрирах org.springframework.context.ApplicationListener<HttpSessionDestroyedEvent> както и а javax.servlet.http.HttpSessionListener, Внедрените методи работят, когато потребителят използва връзката за изход. Но когато сесията изтече, това е така, сякаш събитията не са генерирани.

Забравям ли да слушам правилните събития? Или няма изгодно за времето за изчакване на сесията? Има ли друг начин да се постигне това? Зависи ли от настройката на сървъра (кой е котето 6.0.24 btw)?

Отговори:

14 за отговор № 1

Аз не правя пролетта, така че няма текст за това, а за javax.servlet.http.HttpSessionListener трябва да работи, когато се въведе и регистрира правилно. Трябва да го регистрирате като <listener> в web.xml както следва:

<listener>
<listener-class>com.example.MyHttpSessionListener</listener-class>
</listener>

Имайте предвид, че изпробвате времето за изчакване на сесията по правилния начин. Затварянето на прозореца на уеб браузъра например спечели "t" веднага унищожи сесията от сървъра. Сесията ще продължи докато клиентът не изпрати HTTP заявка за 30 минути. Тези 30 минути са стандартното време за изчакване на сесията, което може да се конфигурира от <session-timeout> влизане в web.xml.

Също така, servletcontainer не спечели веднага унищожи сесиите след точно стойността на изчакване. Това е функция на фона, която работи на определени интервали от време (например 5 ~ 15 минути в зависимост от натоварването и от типа / видът на сървъра). sessionDestroyed() метод, който се нарича след точно 30 минути бездействие. Въпреки това, когато задействате HTTP заявка по време на сесия, която е изтекла, но все още не е унищожена, тя ще бъде унищожена незабавно.

Вижте също:


2 за отговор № 2

Мисля, че подходът DelegatingSessionListener може да бъде полезен. Тук вече споменахме:

Как да инжектирате зависимости в HttpSessionListener, използвайки Пролет?