Mam wymaganie, aby użytkownik końcowy nie mógł wrócić do strony z ograniczeniami po wylogowaniu / wylogowaniu się. Ale obecnie użytkownik końcowy może to zrobić za pomocą przycisku Wstecz przeglądarki, odwiedzając historię przeglądarki lub nawet ponownie wprowadzając adres URL w pasku adresu przeglądarki.
Zasadniczo chcę, aby użytkownik końcowy nie mógł w żaden sposób uzyskać dostępu do strony z ograniczeniami po wylogowaniu. Jak mogę to osiągnąć najlepiej? Czy mogę wyłączyć przycisk Wstecz w JavaScript?
Odpowiedzi:
Możesz i nie powinieneś wyłączać przycisku wstecz lub historii przeglądarki. To źle wpływa na wrażenia użytkownika. Istnieją hacki JavaScript, ale nie są one niezawodne i nie będą działać, gdy klient ma wyłączony JS.
Twoim konkretnym problemem jest to, że żądana strona została załadowana z pamięci podręcznej przeglądarki, a nie prosto z serwera. Jest to zasadniczo nieszkodliwe, ale w rzeczywistości dezorientujące dla użytkownika końcowego, ponieważ błędnie uważa, że tak naprawdę pochodzi z serwera.
Wystarczy poinstruować przeglądarkę, aby nie buforowała wszystkich zastrzeżonych stron JSP (a więc nie tylko samej strony wylogowania / akcji!). W ten sposób przeglądarka jest zmuszona zażądać strony z serwera zamiast z pamięci podręcznej, a zatem wszystkie testy logowania na serwerze zostaną wykonane. Możesz to zrobić za pomocą filtru, który ustawia niezbędne nagłówki odpowiedzi w
doFilter()
metodzie:Na przykład mapuj to
Filter
naurl-pattern
interesujący Cię obiekt*.jsp
.Lub jeśli chcesz umieścić to ograniczenie tylko na zabezpieczonych stronach, powinieneś określić wzorzec adresu URL obejmujący wszystkie te zabezpieczone strony. Na przykład, gdy wszystkie znajdują się w folderze
/app
, musisz określić wzorzec adresu URL/app/*
.Co więcej, możesz wykonać tę pracę w taki sam sposób,
Filter
jak sprawdzasz obecność zalogowanego użytkownika.Nie zapomnij wyczyścić pamięci podręcznej przeglądarki przed testowaniem! ;)
Zobacz też:
źródło
doFilter()
metodę. Po naciśnięciu przycisku wylogowania następuje przekierowanie do serwletu, w którym unieważniam sesję. Nie jestem pewien, jak tadoFilter()
metoda działa tutaj. Czy możesz mi powiedzieć, jak to wdrożyć? Jak w, właściwe kroki do naśladowania. Dzięki.sendRedirect(...)
iforward()
.* .jsp we wzorcu adresu URL nie będzie działać, jeśli przekażesz stronę dalej. Spróbuj dołączyć także swój serwlet ... dzięki temu aplikacja będzie chroniona przed problemem z przyciskiem Wstecz.
źródło
Najprostszym sposobem na zrobienie tego bez wyłączania przycisku wstecz przeglądarki jest dodanie tego kodu do
page_load
zdarzenia strony, do której użytkownik nie ma wracać po wylogowaniu:źródło
Możesz spróbować powiedzieć przeglądarce, aby nie buforowała strony głównej (używając odpowiednich nagłówków - Expires, Cache-Control, Pragma). Ale nie ma gwarancji, że zadziała. Co możesz zrobić, to wykonać wywołanie AJAX do serwera podczas ładowania strony, aby sprawdzić, czy użytkownik jest zalogowany, a jeśli nie - przekierować.
źródło
Prawidłowym sposobem na to jest dodanie
nagłówek na zabezpieczonych stronach. Gdy użytkownik się wyloguje, wyczyść jego sesyjny plik cookie. Następnie, gdy powrócą po wylogowaniu, pamięć podręczna przeglądarki zostanie pominięta. Ma to również tę zaletę, że nie pokonuje całkowicie buforowania.
źródło