आप ब्राउजर बैक बटन या हिस्ट्री को डिसेबल नहीं कर सकते हैं । उपयोगकर्ता अनुभव के लिए यह बुरा है। जावास्क्रिप्ट हैक कर रहे हैं, लेकिन वे विश्वसनीय नहीं हैं और यह भी काम नहीं करेगा जब ग्राहक जेएस अक्षम है।
आपकी ठोस समस्या यह है कि अनुरोधित पृष्ठ को सर्वर से सीधे के बजाय ब्राउज़र कैश से लोड किया गया है। यह अनिवार्य रूप से हानिरहित है, लेकिन वास्तव में एंड्यूसर को भ्रमित कर रहा है, क्योंकि s / वह गलत तरीके से सोचता है कि यह वास्तव में सर्वर से आ रहा है।
आपको बस सभी प्रतिबंधित जेएसपी पृष्ठों को कैश न करने के लिए ब्राउज़र को निर्देश देने की आवश्यकता है (और इस प्रकार केवल लॉगआउट पेज / एक्शन ही नहीं!)। इस तरह से ब्राउज़र को कैश के बजाय सर्वर से पृष्ठ का अनुरोध करने के लिए मजबूर किया जाता है और इसलिए सर्वर पर सभी लॉगिन चेक निष्पादित किए जाएंगे। आप एक फ़िल्टर का उपयोग करके ऐसा कर सकते हैं जो विधि में आवश्यक प्रतिक्रिया हेडर सेट करता है :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);
}
// ...
}
उदाहरण के लिए, ब्याज Filter
पर इसे मैप करें ।url-pattern
*.jsp
@WebFilter("*.jsp")
या यदि आप केवल सुरक्षित पृष्ठों पर यह प्रतिबंध लगाना चाहते हैं, तो आपको एक URL पैटर्न निर्दिष्ट करना चाहिए जो उन सभी सुरक्षित पृष्ठों को कवर करता है। उदाहरण के लिए, जब वे सभी फ़ोल्डर में होते हैं /app
, तो आपको URL पैटर्न निर्दिष्ट करने की आवश्यकता होती है /app/*
।
@WebFilter("/app/*")
और भी, आप यह काम उसी Filter
तरह से कर सकते हैं जैसे आप लॉग-इन उपयोगकर्ता की उपस्थिति की जाँच कर रहे हैं।
परीक्षण से पहले ब्राउज़र कैश साफ़ करना न भूलें! ;)
यह सभी देखें: