Sen ve olmamalıdır olabilir tarayıcı geri düğmesine veya geçmiş devre dışı bırakın. Bu, kullanıcı deneyimi için kötü. JavaScript hack'leri vardır, ancak bunlar güvenilir değildir ve istemci JS'yi devre dışı bıraktığında da çalışmazlar.
Somut sorununuz, istenen sayfanın doğrudan sunucudan değil tarayıcı önbelleğinden yüklenmesidir. Bu aslında zararsızdır, ancak son kullanıcı için gerçekten kafa karıştırıcıdır, çünkü yanlış bir şekilde sunucudan geldiğini düşünür.
Tarayıcıya tüm kısıtlanmış JSP sayfalarını önbelleğe almaması talimatını vermeniz yeterlidir (dolayısıyla sadece çıkış sayfasını / eylemini değil!). Bu şekilde tarayıcı, sayfayı önbellek yerine sunucudan istemeye zorlanır ve bu nedenle sunucudaki tüm oturum açma kontrolleri yürütülür. Bir kullanarak yapabilirsiniz Filtre setleri gerekli yanıt başlıklarını içinde yöntemle:doFilter()
@WebFilter
public class NoCacheFilter implements Filter {
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
response.setDateHeader("Expires", 0); // Proxies.
chain.doFilter(req, res);
}
// ...
}
Örneğin, bunu Filter
bir url-pattern
ilgi alanına göre eşleştirin *.jsp
.
@WebFilter("*.jsp")
Veya bu kısıtlamayı yalnızca güvenli sayfalara koymak istiyorsanız, o zaman tüm bu güvenli sayfaları kapsayan bir URL modeli belirtmelisiniz. Örneğin, hepsi klasörün içindeyken /app
URL modelini belirtmeniz gerekir /app/*
.
@WebFilter("/app/*")
Dahası, bu işi Filter
, oturum açmış kullanıcının varlığını kontrol ettiğiniz yerle aynı şekilde yapabilirsiniz .
Test etmeden önce tarayıcı önbelleğini temizlemeyi unutmayın! ;)
Ayrıca bakınız: