您的位置:首页 > 运维架构 > 网站架构

servlet用户登录网站(数据库验证)sqlserver

2011-07-21 15:30 543 查看
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)

view plaincreate 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)

view plainpublic 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();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐