เมื่อเร็ว ๆ นี้ฉันได้ทำโครงการที่มีข้อกำหนดแล้ว ฉันต้องการใช้ฟังก์ชั่นการเข้าสู่ระบบอัตโนมัติ โดยการตรวจสอบข้อมูลที่เกี่ยวข้องฉันวางแผนที่จะใช้การตรวจสอบเซสชันเพื่อทำ ต่อไปนี้เป็นรายการของวิธีการสำหรับการกำหนดค่าจอภาพ:
1. เพิ่มรหัสต่อไปนี้ในไฟล์ web.xml ของโครงการ:
<!-เพิ่ม Session Listener-> <Listener> <Sistener-Class> Path Listener </Listener-Class> </Listener>
2. เขียนคลาส Java
Public Class SessionListener ใช้ httpsessionListener {โมฆะสาธารณะ sessionCreated (httpsessionEvent arg0) {// simpledateFormat ดำเนินการเมื่อเซสชันถูกสร้าง SimpleFormat simpleFormat = new SimpleDateFormat ("mm-ss-ms") "+Nowtimes+" _ "+u); httpsession ses = arg0.getSession (); string id = ses.getId ()+" _ "+ses.getCreationTime ();} โมฆะสาธารณะ sessionDestroyed (httpsessionEvent arg0) สตริง nowtimes = simpleformat.format (วันที่ใหม่ ()); //system.out.println("session หมดอายุแล้ว .. เวลาสิ้นสุด: "+Nowtimes);}}หลังจากการกำหนดค่าเสร็จสิ้นฉันป้อนวิธีการเซสชันที่ถูกทำลายหลังจากเซสชันหมดอายุ ฉันพร้อมที่จะดำเนินการกระโดดหน้า ทันใดนั้นฉันก็พบวิธีการเขียนกระโดด ฉันตกตะลึงและท่องอินเทอร์เน็ตต่อไปเพื่อถามอาจารย์ ฉันพบว่าจอภาพนี้ทำด้วยการประมวลผลสถิติพื้นหลังบางอย่างและไม่สามารถตระหนักถึงการทำงานของการกระโดดหน้าเว็บ
ฉันสามารถยกเลิกวิธีนี้และเริ่มใช้ตัวกรองเพื่อใช้งานได้
1. เพิ่มการกำหนดค่าตัวกรองใน web.xml
<Tilter> <Tilter-Name> SessionFilter </filter-name> <sider-class> com.orchestrall.web.helper.session.sessionfilter </filter-class> </filter> <filter-mapping>
2. สร้างคลาส SessionFilter ใหม่เพื่อใช้อินเตอร์เฟสตัวกรอง
คลาสสาธารณะ SessionFilter ใช้ตัวกรอง {โมฆะสาธารณะทำลาย () {// วิธีการที่สร้างขึ้นอัตโนมัติ stub} โมฆะสาธารณะ dofilter (คำขอ ServletRequest, การตอบสนอง servletResponse, chain filterChain) โยน iOException, servletexception httpresponse = (httpservletResponse) การตอบสนอง; httpsession เซสชัน = httprequest.getSession (); // log ใน urlstring loginurl = httprequest.getContextpath () + "/admin/login.jsp" url.SubString (url.AltIstIndexof ("/")); // การประมวลผลหมดเวลา, AJAX ขอหมดเวลากำหนดสถานะการหมดเวลาและหน้าการร้องขอการหมดเวลาจะส่งคืนพรอมต์และเปลี่ยนเส้นทางถ้า (path.indexof (". การกระทำ")! = -1 && session.getattribute (httprequest.getheader ("x-requested-with")! = null && httprequest.getheader ("x-requested-with"). equalsignorecase ("xmlhttprequest") {httpresponse.addheader LoginUrl); chain.dofilter (คำขอ, การตอบกลับ); // เป็นไปไม่ได้มิฉะนั้นคำขอจะเกิดข้อผิดพลาด} else {string str = "<ภาษาสคริปต์ = 'javascript'> การแจ้งเตือน ('เซสชันหมดอายุโปรดลงชื่อเข้าใช้อีกครั้ง');"+ "window.top.location.href = ' "'; </script>"; Response.setContentType ("ข้อความ/html; charset = utf-8"); // แก้ปัญหาภาษาจีนที่อ่านไม่ออก {printwriter writer = response.getWriter (); writer.write (str); writer.flush (); writer.close (); {chain.dofilter (คำขอ, การตอบสนอง);}}@overridepublic void init (filterconfig arg0) พ่น servletexception {// todo วิธีการสร้างอัตโนมัติ stub}}}}3. ไคลเอน
สำหรับ jQuery
<script type = "text/javascript"> $ (เอกสาร) .ajaxcomplete (ฟังก์ชั่น (เหตุการณ์, xhr, การตั้งค่า) {ถ้า (xhr.getResponseHeader ("sessionstatus") == "หมดเวลา") {ถ้า (xhr.getResponseHeader ( window.location.replace (xhr.getResponseHeader ("loginpath")); </script>คำขอ ajax สำหรับ extjs
ext.ajax.on ('requestcomplete', checkuserSessionStatus, this); ฟังก์ชั่น checkuserSessionStatus (Conn, การตอบสนอง, ตัวเลือก) {ถ้า (response.getResponseHeader ("SessionStatus") == 'หมดเวลา') {ถ้า (ตอบกลับ Response.getResponseHeader ("LoginPath");} else {Alert ("การหมดเวลาร้องขอโปรดเข้าสู่ระบบอีกครั้ง!");}}}หากคำขอ AJAX บางอย่างไม่ได้รับผลกระทบจากวิธีการทั่วโลกจากนั้นเมื่อใช้วิธี $ .ajax (), Global ในพารามิเตอร์สามารถตั้งค่าเป็นเท็จได้ รหัส jQuery มีดังนี้:
$ .ajax ({url: "test.html", global: false // อย่าทริกเกอร์เหตุการณ์ Ajax ทั่วโลก})ข้างต้นเป็นรหัสตัวอย่างที่ตัวแก้ไขแนะนำให้คุณทราบว่าเซสชันจะข้ามไปยังหน้าเข้าสู่ระบบโดยอัตโนมัติหลังจากหมดอายุ ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน หากคุณต้องการทราบข้อมูลเพิ่มเติมโปรดใส่ใจกับเว็บไซต์ Wulin.com!