บทความนี้แบ่งปันรหัสโดยละเอียดสำหรับ Java เพื่อตรวจสอบว่าผู้ใช้ได้รับการลงชื่อเข้าใช้และตระหนักถึงการเข้าสู่ระบบอัตโนมัติสำหรับการอ้างอิงของคุณหรือไม่ เนื้อหาเฉพาะมีดังนี้
1. ยืนยันว่าผู้ใช้เข้าสู่ระบบแล้ว
แพ็คเกจ cn.hongxin.filter; นำเข้า java.io.ioexception; นำเข้า Javax.servlet.filter; นำเข้า javax.servlet.filterchain; นำเข้า Javax.servlet.filterconfig; นำเข้า Javax.servlet.servletexception; javax.servlet.http.httpservletrequest; นำเข้า Javax.servlet.http.httpservletResponse; นำเข้า Javax.servlet.http.httpsession; Public Class LoginFilter ใช้ตัวกรอง {public void init (filterConfig filterConfig) พ่น servletexception {} โมฆะสาธารณะ dofilter (คำขอ servletrequest, การตอบสนอง servletResponse, chain filterchain) // รับเซสชัน httpsession ss = req.getSession (); // รับผู้ใช้จากเซสชันถ้า (ss.getattribute ("ผู้ใช้") == null) {system.err.println ("คุณยังไม่ได้เข้าสู่ระบบ"); req.getSession (). setAttribute ("msg", "โปรดเข้าสู่ระบบก่อน"); // เปลี่ยนเส้นทางไปสู่การเข้าสู่ระบบ httpservletResponse resp = (httpservletResponse) การตอบสนอง; resp.sendredirect (req.getContextPath ()+"/index.jsp"); [w2]} else {// chain chain.dofilter (คำขอ, การตอบกลับ); }} โมฆะสาธารณะทำลาย () {}}กำหนดค่าเป็น web.xml และพิจารณา JSPS/*::
<silter> <filter-name> เข้าสู่ระบบ </filter-name> <filter-class> cn.itcast.filter.loginfilter </ตัวกรอง-Class> </filter> <filter-mapping> <filter-name> เข้าสู่ระบบ </filter-name> <url-pattern>/url-patter </ตัวกรองการทำแผนที่>
2. ตระหนักถึงการเข้าสู่ระบบอัตโนมัติ
การเข้าสู่ระบบอัตโนมัติคือการช่วยให้ผู้ใช้เข้าสู่ระบบโดยไม่ต้องป้อนชื่อผู้ใช้และรหัสผ่านอีกครั้งเมื่อใช้หน้าเว็บนี้หลายครั้ง
หมายความว่าผู้ใช้จะบันทึกข้อมูลการเข้าสู่ระบบของผู้ใช้และบุคคลในคุกกี้ไฟล์ท้องถิ่น
ชื่อ, ค่าคุกกี้ใหม่ (คีย์, ค่า);
PATH - ค่าเริ่มต้นคือเส้นทางที่ Serlvet ที่บันทึกคุกกี้อยู่ในปัจจุบัน
ถ้าคุกกี้อยู่ในเส้นทางดังกล่าว: http: // loclhost: 8080/project/abc/aservlet เส้นทางของคุกกี้คือ: http: // loclhost/project/abc
ถ้าอย่างนั้นก็หมายความว่า:
เฉพาะ servlet ที่อยู่ในไดเรกทอรี http: // loclhost/project/abc เท่านั้นที่สามารถอ่านค่าของคุกกี้นี้ได้
ถ้า:
บันทึกคลาสคุกกี้: http: // loclhost: 8080/project/a/b/aservlet เส้นทางเริ่มต้นของคุกกี้คือ; http: // loclhost/project/a/b
ขั้นตอนที่ 1: พัฒนาหน้าเข้าสู่ระบบ
<c: เลือก> <c: เมื่อ test = "$ {ว่างเปล่า sessionsCope.Name}"> <form name = "x" method = "post" action = "<c: url value = '/loginServlet'/>"> ชื่อ: <อินพุตประเภท = "text" name = "name"/> <br/> type = "radio" name = "auto" value = "1"> 1 วัน <br/> <อินพุต type = "radio" name = "auto" value = "7"> 1 สัปดาห์ <br/> <อินพุต type = "ส่ง"/> </form> </c: <c: c: minre> value = '/loginservlet' //> "> loginServlet '/loginServlet' //"> loginServlet </a> </c: มิฉะนั้น> </c: เลือก>ขั้นตอนที่ 2: บันทึกคุกกี้ได้สำเร็จ
โมฆะสาธารณะ dopost (คำขอ httpservletrequest, การตอบกลับ httpservletResponse) พ่น servletexception, ioexception {// รับชื่อสตริงชื่อผู้ใช้ = request.getParameter ("ชื่อ"); String auto = request.getParameter ("auto"); // ใส่ข้อมูลผู้ใช้ใน request.getSession (). setAttribute ("ชื่อ", ชื่อ); // ปกป้องว่าอัตโนมัติคือ -1 ถ้า (! auto.equals (" -1")) {int day = integer.parseint (อัตโนมัติ); // 1 | 7 int วินาที = 60*60*24*วัน; // ประกาศคุกกี้คุกกี้ c = คุกกี้ใหม่ ("autologin", ชื่อ); C.SetMaxage (วินาที); C.SetPath (request.getContextPath ()); // บันทึกการตอบสนองคุกกี้ Addcookie (C); -ขั้นตอนที่ 3: ควรเข้าสู่ระบบอัตโนมัติหากคุณต้องการเข้าถึงหน้าใด ๆ ในเว็บไซต์นี้
เขียน scrutinizer เพื่อพิจารณา url ทั้งหมด =/* อ่านคุกกี้ทั้งหมดใน Dofilter มีคุกกี้ชื่อที่มีชื่อ Autologin หรือไม่?
ปล่อยไปเสมอ
โมฆะสาธารณะ Dofilter (คำขอ ServletRequest, การตอบสนอง servletResponse, ห่วงโซ่ FilterChain) พ่น IOException, servletexception {// อ่านคุกกี้ที่นี่ httpservletrequest req = (httpservletrequest) คำขอ; // รับคุกกี้คุกกี้ทั้งหมด [] CS = req.getCookies (); if (cs! = null) {สำหรับ (คุกกี้ c: cs) {ถ้า (c.getName (). เท่ากับ ("autologin")) {// ถ้ามีคุกกี้ที่เข้าสู่ระบบโดยอัตโนมัติในค่าสตริง = c.getValue (); // ชื่อผู้ใช้ // ล็อกอิน หยุดพัก; }}} // ไม่ว่าจะมีการลงชื่อเข้าใช้โดยอัตโนมัติลงใน chain.dofilter (คำขอ, การตอบสนอง); -ที่สี่เกี่ยวข้องกับ: กำหนดค่า urls ทั้งหมด =/* ใน web.xml
<silter> <filter-name> auto </filter-name> <s Filter-Class> cn.itcast.filter.autofilter </filter-class> </filter> <filter-mapping> <filter-name> auto </filter-name>
ขั้นตอนที่ 5: ทางออกการพัฒนา
System.err.println ("ผู้ใช้ออก"); // ลบคำขอเซสชันทั้งหมด getSession (). unvalidate (); คุกกี้ c = คุกกี้ใหม่ ("autologin", "ddd"); C.SetMaxage (0); C.SetPath (request.getContextPath ()); Response.addcookie (C); // request.getSession (). RemoveAttribute ("ชื่อ"); Response.Sendredirect (request.getContextPath ()+"/index.jsp");ขั้นตอนที่ 6: เพิ่มประสิทธิภาพรหัส
เนื่องจากผู้ใช้จะป้อนวิธี Dofilter ของ Autofiilter เมื่อเข้าสู่ระบบด้วยตนเองและอ่านคุกกี้ทั้งหมดเพื่อสำรวจครั้งเดียว และการสำรวจนี้ซ้ำซ้อนสำหรับผู้ใช้
ดังนั้นควรใช้ URL เข้าสู่ระบบใน Dofiler
และคุณไม่สามารถเข้าสู่ระบบโดยอัตโนมัติเมื่อเข้าสู่ระบบ
ข้างต้นเป็นเรื่องเกี่ยวกับบทความนี้ฉันหวังว่ามันจะเป็นประโยชน์กับการเรียนรู้ของทุกคน