servlet学习笔记4——用户登录网站(数据库验证)

2.Servlet中操作数据库
目的:增加到数据库验证用户的功能
特别注意:sql注入漏洞
select * from users where username='admin' and passwd=' admin' or 1='1 ';

解决方法:

不要同时查询用户名和密码,先查询用户名,如果存在,然后将其密码与数据库存储的密码

相比较,若相等,验证成功

 

注意:
需要将连接微软sqlserver数据库的3个jar包(msbase.jar

mssqlserver.jar msutil.jar),拷贝到tomcat服务器(我用mysql故只用一个jar包:

mysql-connector-java-5.1.6-bin.jar)
具体有两种方法:
(1)将.jar 包拷贝到%tocomcat%/commons/lib文件夹
(2)或者在你的webapps目录的WEB-INF文件夹下建立一个lib文

件夹,然后把3个jar包拷贝到lib文件夹下
区别:
第一种:所有的webapps都可以使用3个jar包(公用lib库)
第二种:只有放入jar包的那个webapps能使用jar(独用lib库)

代码示例:

先建立数据库:(testdata1.sql)

create database spdb; use spdb; create table users( userId int auto_increment primary key not null, username varchar(20), passwd varchar(30), email varchar(30), grade int ); insert into users values(1,'admin','admin','[email protected]',1); insert into users values(2,'shunping','shunping','[email protected]',1); insert into users values(3,'testuser1','testuser1','[email protected]',5); insert into users values(4,'testuser2','testuser2','[email protected]',5); insert into users values(5,'testuser3','testuser3','[email protected]',5); insert into users values(6,'testuser4','testuser4','[email protected]',5); select * from users; --sql注入漏洞 select * from users where username='admin' and passwd=' admin' or 1='1 ';

数据库连接servlet代码:(LoginCl.java)

public void process(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { res.setContentType("text/html;charset=UTF-8");// 处理中文乱码 PrintWriter pw = res.getWriter(); Connection ct = null; Statement sm = null; ResultSet rs = null; try { // 接收用户名和密码 String u = req.getParameter("username"); String p = req.getParameter("passwd"); // 连接数据库 Class.forName("com.mysql.jdbc.Driver");// 加载驱动 // 得到连接 ct = DriverManager.getConnection( "jdbc:mysql://localhost:3306/spdb", "root", "root"); // 创建Statement sm = ct.createStatement(); // sql注入漏洞 // rs=sm.executeQuery("select * from users where username='"+u // +"' and passwd='"+p+"'"); rs = sm.executeQuery("select passwd from users where username='" + u + "'"); if (rs.next()) { // 说明用户是存在的 String dbPasswd = rs.getString(1); if (dbPasswd.equals(p)) { // 真的合法 // 将用户信息存入session中 HttpSession hs = req.getSession(true); hs.setMaxInactiveInterval(30); hs.setAttribute("name", u); res.sendRedirect("welcome");// 跳转 } else { res.sendRedirect("login"); } } else { // 说明用户名不存在 res.sendRedirect("login"); } } catch (Exception ex) { ex.printStackTrace(); } finally {// 按打开对象的逆序关闭对象 try { if (rs != null) { rs.close(); } if (sm != null) { sm.close(); } if (ct != null) { ct.close(); } } catch (Exception ex) { ex.printStackTrace(); } } }

 

 

你可能感兴趣的:(JavaWeb,数据库,servlet,insert,exception,sqlserver,jar)