Używam Apache Shiro w mojej aplikacji internetowej.Shiro resetuje sesję po 2 min.
Przechowuję niektóre parametry w sesji, w szczególności klucz podstawowy obiektu przechowywanego w bazie danych.
Po zalogowaniu użytkownik ładuje obiekt z bazy danych i zapisuje klucz podstawowy w sesji. Następnie w aplikacji użytkownik może edytować dane obiektu i nacisnąć przycisk anulowania lub zapisania.
Oba przyciski uruchamiają usługę RPC, która pobiera zaktualizowane dane na serwer. Obiekt jest następnie aktualizowany w bazie danych przy użyciu klucza podstawowego zapisanego w sesji.
Jeśli użytkownik pozostaje aktywny w aplikacji (wykonując niektóre wywołań RPC), wszystko działa poprawnie. Ale jeśli pozostanie nieaktywny przez 3 minuty, a następnie wykona RPC, wtedy securityUtils.getSubject().getSession()
Shiro zwróci wartość null.
Limit czasu sesji wynosi 1 200 000 ms (20 min), więc nie sądzę, że to jest problem.
Kiedy przechodzę przez sesje przechowywane w pamięci podręcznej mojego menedżera sesji, widzę sesję użytkownika org.apache.shiro.session.mgt.SimpleSession,id=6de78f10-b58e-496c-b40a-e2a9a4ad069c
, ale kiedy próbuję uzyskać identyfikator sesji z pliku cookie i zadzwonić pod numer SecurityUtils.getSecurityManager().getSession(key)
, aby uzyskać sesję (gdzie klucz jest Implementacja SessionKey): otrzymuję wyjątek.
Kiedy próbuję budować nowy temat z ID sesji, tracę wszystkie atrybuty zapisane w sesji.
Z przyjemnością zamieszczam kod, aby pomóc w rozwiązaniu problemu, ale spróbowałem tak wielu obejść, że nie wiem od czego zacząć ... Proszę więc dać mi znać, czego potrzebujesz.
Ewentualnie jeśli ktoś wie lepiej udokumentowane niż ramy Shiro Jestem wszystkim uszy (brak Shiro dokumentacji sprawia, że naprawdę zbyt czasochłonne)
Jaka była poprawka? Nie jest to oczywiste z twojej odpowiedzi, ponieważ nie wyjaśniłeś, co zmieniłeś lub opublikowałeś oryginalną konfigurację. – frhd