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','admin@sohu.com',1);
- insert into users values(2,'shunping','shunping','shunping@sohu.com',1);
- insert into users values(3,'testuser1','testuser1','testuser1@sohu.com',5);
- insert into users values(4,'testuser2','testuser2','testuser2@sohu.com',5);
- insert into users values(5,'testuser3','testuser3','testuser3@sohu.com',5);
- insert into users values(6,'testuser4','testuser4','testuser4@sohu.com',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();
- }
- }
- }