Artikel ini menjelaskan contoh metode implementasi servlet untuk menangani login pengguna. Bagikan dengan semua orang untuk referensi Anda. Analisis spesifiknya adalah sebagai berikut:
Kode login.java adalah sebagai berikut:
Copy kode kodenya sebagai berikut:
paket com.bai;
impor javax.servlet.http.*;
import java.io.*;
Login kelas publik meluas HttpServlet{
public void doGet(Permintaan HttpServletRequest,HttpServletResponse res){
coba{req.setCharacterEncoding("gb2312");
res.setContentType("teks/html;charset=gb2312");
Penulis Cetak pw=res.getWriter();
pw.println("<html>");
pw.println("<tubuh>");
pw.println("<h1>Antarmuka login</h1>");
pw.println("<formulir tindakan=metode logincl=post>");
pw.println("Nama Pengguna:<tipe input=nama teks=Nama Pengguna><br>");
pw.println("Kata Sandi:<tipe masukan=nama kata sandi=passwd><br>");
pw.println("<tipe input=kirim nilai=login><br>");
pw.println("</form>");
pw.println("</body>");
pw.println("</html>");
}
tangkapan(Pengecualian e){
e.printStackTrace();
}
}
public void doPost(Permintaan HttpServletRequest,HttpServletResponse res){
this.doGet(req,res);
}
}
Kode LoginCl.java adalah sebagai berikut:
Copy kode kodenya sebagai berikut:
paket com.bai;
impor javax.servlet.http.*;
import java.io.*;
impor java.sql.*;
kelas publik LoginCl memperluas HttpServlet{
public void doGet(Permintaan HttpServletRequest,HttpServletResponse res){
Sambungan koneksi=null;
Pernyataan stmt=null;
Set Hasil rs=null;
String sql = "pilih nama pengguna,passwd dari pengguna di mana nama pengguna = ? dan passwd = ?";
coba{//req.setCharacterEncoding("gb2312");
String pengguna=req.getParameter("nama pengguna");
String kata sandi=req.getParameter("passwd");
Kelas.forName("com.mysql.jdbc.Driver");
conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/sqdb","root","root");
// stmt=sambungan.createStatement();
PreparedStatement pstmt = samb.prepareStatement(sql);
pstmt.setString(1, pengguna);
pstmt.setString(2, kata sandi);
rs = pstmt.executeQuery();
// rs=stmt.executeQuery("pilih 1 teratas * dari pengguna dengan nama pengguna='"+pengguna
// +"' dan passwd='"+kata sandi+"'");
if(rs.next())
{
HttpSession hs=req.getSession(benar);
hs.setMaxInactiveInterval(60);
hs.setAttribute("nama",pengguna);
res.sendRedirect("selamat datang?&uname="+pengguna+"&upass="+kata sandi);
}
kalau tidak{
res.sendRedirect("login"); //url
}
}
tangkapan(Pengecualian e){
e.printStackTrace();
}Akhirnya{
mencoba{
jika(rs!=batal){
rs.close();
}
jika(stmt!=nol){
stmt.tutup();
}
if(sambungan!=batal){
samb.close();
}
}menangkap(Pengecualian e){
e.printStackTrace();
}
}
}
public void doPost(Permintaan HttpServletRequest,HttpServletResponse res){
this.doGet(req,res);
}
}
Faktanya, pemrosesan nama pengguna dan kata sandi di atas memiliki kerentanan injeksi yang jelas. Anda dapat mengambil kata sandi dari database berdasarkan nama pengguna, dan membandingkan kata sandi yang diambil dengan kata sandi yang dimasukkan oleh pengguna.
Copy kode kodenya sebagai berikut:
sql=pilih kata sandi dari pengguna dengan nama pengguna = ?
if(rs.next())
{
String passwd=rs.getString(1);
if(passwd.sama dengan(kata sandi))
//Kata sandinya benar
lain // Kata sandi salah
}
Kode Welcome.java adalah sebagai berikut:
Copy kode kodenya sebagai berikut:
paket com.bai;
impor javax.servlet.http.*;
import java.io.*;
kelas publik Selamat Datang memperluas HttpServlet{
public void doGet(Permintaan HttpServletRequest,HttpServletResponse res){
HttpSession hs=req.getSession();
String val=(String)hs.getAttribute("lulus");
jika(val==batal){
mencoba{
Sistem.keluar.cetak(1);
res.sendRedirect("login");
}menangkap(Pengecualian e){
e.printStackTrace();
}
}
String u=req.getParameter("uname");
String p=req.getParameter("upass");
coba{//req.setCharacterEncoding("gb2312");
Penulis Cetak pw=res.getWriter();
pw.println("selamat datang! "+u+"&pass="+p);
}
tangkapan(Pengecualian e){
e.printStackTrace();
}
}
public void doPost(Permintaan HttpServletRequest,HttpServletResponse res){
this.doGet(req,res);
}
}
Saya harap artikel ini bermanfaat untuk pemrograman Java semua orang.