Dalam kehidupan kita, sudah sangat umum untuk login otomatis ke akun, jadi kami menggunakan filter untuk mengimplementasikan fungsi ini.
Ini terutama memperkenalkan login otomatis pengguna dan membatalkan login otomatis, serta realisasi login otomatis dalam satu hari atau n hari. Setelah IP pengguna ditambahkan ke daftar hitam, secara langsung menggunakan filter untuk kembali ke halaman peringatan.
Fungsi filter sangat kuat. Kita hanya perlu menambahkan servlet setelah backend front-end tertulis untuk mewujudkan fungsi ini.
PS: Ini hanya demonstrasi. Saya mensimulasikan bagian dari database akses sendirian, terutama berfokus pada realisasi fungsi login otomatis.
Kode meja depan:
Apakah kode latar depan berhasil atau tidak ditampilkan di halaman ini. Teknik yang Digunakan: Aplikasi Tag JSTL, Nilai Bacaan Sesi
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <adept> </head> <body> <c: if test = "$ {! empuk sesionscope.Error}"> Kata sandi atau nama pengguna Anda salah. <!-Setelah ditampilkan, Anda perlu menghapus nilai di dalam-> <c: hapus var = "error" scope = "session"/> </c: if> <c: if test = "$ {end {event sesionscope.user}" var = "boo" <h2> ini adalah halaman untuk login </h2> <bentuk action = "<c: c: c: c: c: c: c: coTon =" cobin = "" c: "c: c: c: c: c: c: cobin =" "c:" c: "c: c: c: c: c: coN//oTPUT =" c: c: c: c: c: c: c: c: c: coT/oMOBLET = "c: c: c: c: c: c: c: c: c: c: co. type = "text" name = "name" /> <br/> pwd: <input type = "text" name = "pwd" /> <br/> tidak secara otomatis masuk: <input type = "radio" name = "time" value = "0" /> <br/> satu hari: <input type = "radio" name = "time" value = "1" value = "7"/> <br/> <input type = "kirim" value = "kirim"/> </form> </c: if> <c: if test = "$ {! boo}"> Selamat datang, $ {sesionscope.user}, berhasil login "<a href ="> </a> </a> </a> <"a href =" a href = "> </a> </a> </a> <" a href = "<a href =" "> </a> </a> href = "<c: value url = '/cancinAutologin' //>"> cancelAutologin </a> </c: if> </body> </html>Kode Implementasi Servlet:
Seperti kode sebelumnya, ini hanya bertanggung jawab untuk berinteraksi dengan meja depan: teknologi yang digunakan di dalamnya termasuk pengkodean URL, nilainya ada di cookie, sesi ada di halaman, dan halaman dilompat (diteruskan)
public void dopost (permintaan httpservletRequest, respons httpservletResponse) melempar servletException, ioException {string name = request.getParameter ("name"); String pwd = request.getParameter ("pwd"); String time = request.getParameter ("waktu"); if (name! = null && pwd! = null && name.equals (pwd)) {// tulis di sini sesuka Anda, Anda harus pergi ke layanan-> dao untuk mengakses database nanti // dengan asumsi bahwa login berhasil, kami menyimpan informasi ke dalam request.getSession (). setattribute ("user", name); // kompatibel dengan bahasa Cina, kita perlu mengkode nama = urlencoder.encode (nama, "UTF-8"); pwd = urlencoder.encode (PWD, "UTF-8"); Cookie c = cookie baru ("autologin", name+","+pwd); // nilai ini tidak dapat digunakan dengan cara ini. Untuk pertimbangan keamanan, kita harus tahu untuk menggunakan enkripsi atau enkripsi sekunder, int _time = 60*60*24*integer.valueof (waktu); c.setmaxage (_Time); response.addcookie (c); response.sendredirect (request.getContextPath ()+"/index.jsp"); // Pengaturan default dalam filter adalah untuk mencegat pengalihan, dan penerusan adalah penerusan internal langsung. Namun, filternya tidak mudah ditangani, tetapi Anda hanya perlu mengonfigurasinya di Web.xml. } else {request.getSession (). setAttribute ("error", "1"); response.sendredirect (request.getContextPath ()+"/index.jsp"); }}Sampai sekarang, saya merasa tidak ada teknologi. Kode yang sama dengan yang sebelumnya sekarang menjadi fungsi filter.
Login Aman:
Kami menggunakan impor dinamis untuk masuk dengan aman sebelumnya, untuk mencegah pengguna masuk tanpa masuk setelah memasuki proyek. Anda dapat memasukkan antarmuka sesuka hati dengan memasukkan proyek. Impor dinamis dapat mencapai fungsi ini, tetapi lebih baik menggunakan filter.
Secara umum, dofilter () ditulis dalam filter; Anda hanya perlu menentukan apakah wadah sesi itu nol. Ini berarti bahwa ini tidak masuk. Cukup tendang kembali ke antarmuka login. Kalau tidak, biarkan saja
Kode disajikan:
public void dofilter (permintaan servletRequest, respons servletResponse, rantai filterchain) melempar ioException, servletException {httpservletRequest req = (permintaan httpservletRequest); HttpservletResponse resp = (httpservletResponse); String session = (string) req.getSession (). GetAttribute ("user"); if (session == null) {System.out.println ("login abnormal"); resp.sendredirect (req.getContextPath ()+"/index.jsp"); } else {System.out.println ("Login Sukses"); rantai.dofilter (req, resp); }}Pengkodean Karakter:
Masalah pengkodean karakter. Di masa lalu, saya harus secara manual memasukkannya di dopost () dari servlet setiap kali, request.setcharacterencoding ("UTF-8"); Setiap servlet membutuhkan input, yang terlalu merepotkan, jadi kami menggunakan filter untuk mengimplementasikannya;
Kode disajikan:
<span style = "font-size: 18px;"> public void dofilter (permintaan servletRequest, respons servletResponse, rantai filterchain) melempar ioException, servletException {request.setcharacterencoding (karakter); // hapus encoding yang diterima oleh cliep.setContEntype ("TEKS/HOMPLE (" Hapus; rantai.dofilter (permintaan, respons); } @Override public void init(FilterConfig config) throws ServletException { character=config.getInitParameter("character");//a</span><span style="font-size: 18px; font-family: Arial, Helvetica, sans-serif;">haracter Set as a global variable, </span><span style="font-size:18px;"> } </span>Karakter di atas didefinisikan sebagai variabel global, dan nilai awal dikonfigurasi dalam web.xml.
Kode web.xml disajikan:
<filter> <nilter-name> Karakter </tilter-name> <nilter-class> cn.hncu.filter.characterfilter </tiler-class> <Inn-param> <param-name> Karakter </param-name> </value> UTF-8 </param-value> </init-param> </filter>
Login Otomatis:
Ide utama: Login otomatis membutuhkan penentuan bahwa sesi memiliki nilai. Jika ada, maka setelah masuk, jika tidak ada, pergi ke cookie lokal untuk menemukannya, ada, dan mencocokkan database. Jika pertandingan berhasil, tambahkan wadah sesi.
Kode disajikan:
public void dofilter (permintaan servletRequest, respons servletResponse, rantai filterchain) melempar ioException, servletException {// secara otomatis masuk, Anda harus menetapkan bahwa ada nilai dalam sesi. Jika ada, maka Anda telah masuk dan tidak, Anda harus mengakses data di cookie. Data dalam cookie // apakah itu cocok dengan database? Ya, atur nilai di sesi di sini, tidak, biarkan permintaan httpservletRequest req = (httpservletRequest); HttpservletResponse resp = (httpservletResponse); String session = (string) req.getSession (). GetAttribute ("user"); if (session == null) {// menunjukkan bahwa tidak ada cookie yang telah masuk saat ini cs [] = req.getCookies (); if (cs! = null) {for (cookie c: cs) {if (c.getname (). equals ("autoGin")) {string value = c.getValue (); // ini dienkripsi, tetapi kami hanya terhubung dengan koma. String [] strs = value.split (","); // di logserlvet, kami menggunakan pengkodean terlebih dahulu, dan kemudian koneksi koma. Kita perlu membalikkan nama string = urldecoder.decode (strs [0], "UTF-8"); String pwd = urldecoder.decode (strs [1], "UTF-8"); // Dapatkan nama, data PWD ke latar belakang untuk mengakses database, kami hanya menulis if (name.equals (pwd)) {req.getSession (). SetAttribute ("user", name); // Atur parameter istirahat di sesi; }}}}} rantai.dofilter (req, resp); // Anda harus melepaskannya. . }Pengguna daftar hitam
Pengguna daftar hitam, bukan masuk, beri tahu mereka hasilnya
Kode disajikan:
public void dofilter (permintaan servletRequest, respons servletResponse, rantai filterchain) melempar ioException, servletException {httpservletRequest req = (permintaan httpservletRequest); HttpservletResponse resp = (httpservletResponse); String ip = req.getRemoteAddr (); // dapatkan ip yang diakses; System.out.println (IP+"IIPP"); if (set.contains (ip)) {// di dalam blacklist system.out.println ("set"); resp.getWriter (). print ("Anda berada di daftar hitam .. <a href = '"+req.getContextPath ()+"/index.jsp'> return </a>"); // pengembalian tidak dimungkinkan, karena indeks secara langsung mencegat saat meminta dari server} else {chain.dofilter (req, resp); }} Jenis yang dikembalikan oleh daftar hitam adalah yang terbaik. Saya menambahkannya secara manual di sini. Saya awalnya harus membacanya dari database dengan menulis kelas alat. Itu tidak hanya dapat diperiksa, tetapi juga menambah, menghapus dan memodifikasi - daftar hitam.
Kode disajikan:
Hashset didefinisikan sebagai variabel global, dan set berisi, yang sangat efisien.
public void init (filterconfig arg0) melempar ServletException {// Berikut adalah daftar BlackList, diambil dari database. Berikut ini hanya set simulasi sederhana ("192.132.0.12"); // Ini adalah IP hitam, yang diperoleh dari database latar belakang. set.add ("localhost"); set.add ("192.132.32.4"); set.add ("127.0.0.1"); }Batalkan login otomatis
Ketika login otomatis selalu dianggap tidak aman, kami menetapkan bahwa tidak ada login otomatis
Kami tahu sebelum login otomatis itu bergantung pada teknologi yang disimpan dalam cookie, jadi di sini kami hanya perlu menghapus cookie.
Karena membatalkan login otomatis adalah hyperlink, itu ditulis sebagai servlet.
Kode disajikan:
public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { Cookie cc=new Cookie("autologin", "");//The method to delete the cookie is to create a connkie with the same name, and then set the cookie's setmaxage=0; cc.setmaxage (0); cc.setPath (req.getContextPath ()); resp.addcookie (CC); resp.sendredirect (req.getContextPath ()+"/index.jsp"); }Di atas dapat mewujudkan fungsi jawaban singkat ini.
Di atas adalah penjelasan terperinci tentang pengetahuan yang relevan yang diperkenalkan oleh editor ke Javaee menggunakan filter untuk mencapai login otomatis dan mengamankan login untuk membatalkan login otomatis. 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!