คุณสามารถและไม่ควรปิดใช้งานปุ่มย้อนกลับหรือประวัติของเบราว์เซอร์ ไม่ดีต่อประสบการณ์ของผู้ใช้ มีการแฮ็ก JavaScript แต่ไม่น่าเชื่อถือและจะไม่ทำงานเมื่อไคลเอนต์ปิดใช้งาน JS
ปัญหาที่เป็นรูปธรรมของคุณคือหน้าที่ร้องขอถูกโหลดจากแคชของเบราว์เซอร์แทนที่จะส่งตรงจากเซิร์ฟเวอร์ สิ่งนี้ไม่เป็นอันตรายเป็นหลัก แต่สร้างความสับสนให้กับ enduser เพราะเขา / เขาคิดไม่ถูกว่ามันมาจากเซิร์ฟเวอร์จริงๆ
คุณเพียงแค่สั่งให้เบราว์เซอร์ไม่แคชเพจ JSP ที่ถูก จำกัดทั้งหมด (และไม่เพียง แต่หน้าออกจากระบบ / การกระทำเท่านั้น!) วิธีนี้เบราว์เซอร์จะถูกบังคับให้ร้องขอเพจจากเซิร์ฟเวอร์แทนที่จะเรียกใช้จากแคชและด้วยเหตุนี้การตรวจสอบการเข้าสู่ระบบทั้งหมดบนเซิร์ฟเวอร์จะถูกดำเนินการ คุณสามารถทำได้โดยใช้ตัวกรองซึ่งตั้งค่าส่วนหัวการตอบกลับที่จำเป็นใน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");
response.setHeader("Pragma", "no-cache");
response.setDateHeader("Expires", 0);
chain.doFilter(req, res);
}
}
แผนที่นี้Filter
ในที่น่าสนใจเช่นurl-pattern
*.jsp
@WebFilter("*.jsp")
หรือหากคุณต้องการ จำกัด ข้อ จำกัด นี้ไว้ในหน้าที่มีการรักษาความปลอดภัยเท่านั้นคุณควรระบุรูปแบบ URL ที่ครอบคลุมหน้าที่ปลอดภัยเหล่านั้นทั้งหมด ตัวอย่างเช่นเมื่อทั้งหมดอยู่ในโฟลเดอร์/app
คุณจะต้องระบุรูปแบบ URL ของ/app/*
.
@WebFilter("/app/*")
ยิ่งไปกว่านั้นคุณสามารถทำงานนี้ได้เช่นเดียวFilter
กับที่ที่คุณกำลังตรวจสอบการมีอยู่ของผู้ใช้ที่ลงชื่อเข้าใช้
อย่าลืมล้างแคชของเบราว์เซอร์ก่อนทดสอบ! ;)
ดูสิ่งนี้ด้วย: