Deskripsi umum
Beberapa hari yang lalu, saya secara tidak sengaja memikirkan masalah ini dan merasa itu cukup praktis dan perlu untuk menyelesaikannya. Tidak terasa sulit untuk menulis mode sederhana dengan santai. Sebenarnya cukup sederhana untuk meluruskan ide.
Untuk menyadari bahwa pengguna tidak dapat masuk pada saat yang sama, pikirkan saja tentang Sina, Baidu, dll. Pada kenyataannya, hanya masuk ke satu tempat dan "memeras" tempat lain, dan Anda bisa tahu apa hasil implementasinya. Kemudian membalikkannya dan Anda dapat membentuk ide yang lebih jelas. Mari kita bahas bersama.
Pertama -tama, kita harus memahami login apa yang digunakan oleh pengguna untuk masuk, yaitu prinsip pengguna online. Ini hanya menyimpan objek pengguna di sesi, lalu menyebutnya dalam bingkai, dan halaman spesifik lainnya dapat dirujuk secara langsung. Kemudian fungsi "Squeezing Down" adalah untuk membuat sesi yang baru dihasilkan efektif dan membuat sesi yang awalnya disimpan di pengguna tidak valid. Pada titik ini, ide umum telah ditetapkan. Jadi bagaimana cara mencapainya?
Jika Anda ingin tahu cara mengimplementasikannya, Anda harus memahami proses menyimpan objek pengguna dalam sesi. Setelah pengguna masuk, kami bisa mendapatkan pengguna objek pengguna, dan session.setAttribute(key,value); Kami menyimpan UserID pengguna atau pengidentifikasi unik lainnya sebagai kunci dan menyimpan objek pengguna sebagai nilai. Dengan cara ini, Anda dapat menghubungi satu -satunya pengguna kapan saja, di mana saja. Masalah penyimpanan pengguna telah diselesaikan, bagaimana dengan masalah penghapusan sesi saat masuk?
Ini sebenarnya tidak sulit. Kami dapat memiliki lebih banyak karakteristik sesi, seperti menggunakan peta untuk menyimpan identitas pengguna sebagai kunci, dan menyimpan sesi yang sesuai sebagai nilai. Kemudian ketika pengguna masuk berulang kali, Anda hanya perlu mengeluarkan sesi yang sesuai dan membatalkannya.
Pada titik ini, ide implementasi telah jelas. Setelah begitu lama, semua orang tidak sabar untuk membaca kode, bukan? Ini kodenya:
Pra-Persiapan, Antarmuka JSP
Antarmuka sederhana, hanya antarmuka login sederhana
<form action ="<%=request.getContextPath()%>/UserWXPServlet" method = "post"> Username š<input type = "text" name = "username"/><br/> Password š<input type = "text" name = "password"/><br/> <input type = "submit" value ="submit"/> </form>
Lompat ke halaman setelah sukses
Selamat Datang: ${sessionScope.user.username}登陆!<br/>
Saya belum menulis halaman yang gagal, Anda dapat menulisnya sendiri, dan tidak ada yang bisa dikatakan tentang halaman yang gagal.
Implementasi entitas dan login
Javabean pengguna
nama pengguna string pribadi; kata sandi string pribadi; pengguna publik () {} pengguna publik (pengguna string, kata sandi string) {super (); this.username = pengguna; this.password = kata sandi; } public string getUserName () {return username; } public void setusername (string username) {this.username = username; } public string getPassword () {return kata sandi; } public void setPassword (kata sandi string) {this.password = kata sandi; }Masuk ke metode implementasi layanan pengguna, jadi saya tidak akan menulis DAO dan antarmuka di sini, semuanya sederhana
domain boolean publik (pengguna pengguna) {properties pro = properti baru (); InputStream adalah = userwxpservlet.class.getClassLoader (). GetResourceAsstream ("user_wxp.properties"); String password = null; System.out.println (IS+"--------->"+Pro); if (user == null) {return false; } coba {pro.Load (is); kata sandi = pro.getProperty (user.getUserName ()); if (user.getPassword ()! = null && user.getPassword (). Equals (kata sandi)) {System.out.println ("Login berhasil"); Kembali Benar; }} catch (ioException e) {E.PrintStackTrace (); } akhirnya {if (is! = null) {coba {isClose (); } catch (ioException e) {e.printstacktrace (); }} return false; }Kembalikan true jika login berhasil, dan salah jika gagal.
Kelas Servlet dan Kelas Alat Logis yang sesuai
Kode berikutnya adalah kode nyata untuk mengoperasikan pengguna
Saya telah mendefinisikan dua kelas di sini, satu kelas alat dan satu kelas pemrosesan servlet inti
Beberapa elemen umum ditambahkan ke kelas alat, seperti kode berikut:
/*** Setiap pengguna menyimpan sesi. Mudah dioperasikan dengan segala macam cara! Lai Lai */ peta statis publik <string, httpsession> mapsession = hashmap baru <string, httpsession> (); Kode keluar pengguna (harus terbang untuk menghapuskan sesi atau menghapus objek pengguna yang sesuai): [java] Lihat copypublic static void userLogout (string username) {if (mapsession.get (username)! = Null) {// Dapatkan sesi pengguna yang perlu keluar dari httppsession sesion = users.get) (USERN) (USERN); // Hapus pengguna di peta <username, session>. Ingatlah untuk keluar dari pengguna, Anda harus menghapuskan sesi atau menghapus mapsession pengguna. // Dapatkan koleksi atribut enumerasi sesi e = session.getattributeNames (); // hapus semua atribut sementara (e.hasmoreElements ()) {string sessionName = (string) e.nextElement (); session.removeattribute (sessionName); } // Cabut sesi sesi.invalidate (); }}Kode servlet adalah sebagai berikut:
DoGet void yang dilindungi (permintaan httpservletRequest, respons httpservletResponse) melempar servletException, ioException {string username = request.getParameter ("username"); String password = request.getParameter ("password"); Pengguna pengguna = pengguna baru (nama pengguna, kata sandi); UserserService Userservice = baru UsersEverService (); Httpsession sesi = request.getSession (); if (UsserService.Dologin (user)) {// Setelah login, masukkan pengguna ke sesi sesi .SetAttribute ("user", user); if (cheeksession (username)) {// Jika sesi sudah ada sebelum ini, keluar dari pengguna dbutil.userlogout (nama pengguna); } // penyimpanan sesi baru di peta <username, session> dbutil.mapsession.put (nama pengguna, sesi); // Setelah operasi berhasil, lompat, yang terbaik adalah mengarahkan kembali di sini untuk memberi tahu orang lain bahwa login telah berhasil permintaan.getRequestDispatcher ("Login"). Maju (permintaan, respons); kembali ; } // Lewati halaman kegagalan di sini. Jika pembaca tertarik, mereka dapat menambahkannya sendiri}Kode CheckSession (nama pengguna) adalah sebagai berikut:
/** * Periksa apakah sesi ini sudah terkandung * nama pengguna @param * @return true: itu sudah ada, itu harus dihapus! Salah: tidak hadir */ private boolean checkSession (string username) {httpsession session = dbutil.mapsession.get (username); if (sesi! = null) {return true; } return false; }Akhirnya, lampirkan konfigurasi XML Servlet
<servlet> <cricken> Untuk pengujian, pengguna tidak dapat login berulang kali </cripence> <play-name> userwxpservlet </splay-name> <servlet-name> userwxpservlet </servlet-name> <servlet-class> com.fingard.rabbit.wxp_test.servlet.userwxpservlet </servlet </servlet> servlet> servlet> servlet> servlet> servlet> servlet> servlet> servlet </servlet> </servlet> </servlet> </servlet> </servlet> </servlet> </servlet> </servlet> </servlet> </servlet> </servlet> <servlet-name> userwxpservlet </servlet-name> <rerl-pola>/userwxpservlet </rerl-pattern> </servlet-mapping>
Di atas adalah fungsi Java yang diperkenalkan editor kepada Anda untuk mengimplementasikan fungsi login non-repeat dari pengguna. Saya harap ini akan membantu semua orang. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan dan editor akan membalas semua orang tepat waktu. Terima kasih banyak atas dukungan Anda ke situs web Wulin.com!