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();
}
}
}
目的:增加到数据库验证用户的功能
特别注意: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();
}
}
}
相关文章推荐
- servlet学习笔记4——用户登录网站(数据库验证)
- 在安装discuz!nt时,数据库用户登录失败的问题时,sql server 2008 数据库更改登录模式(sql server 2008 混合登陆中SqlServer身份验证用户名密码)
- 网站用户登录验证:Servlet+JSP VS Struts书剑恩仇录 推荐
- 有关韩顺平视频servlet网站登录数据库验证的代码,没验证成功待解决的
- servlet学习笔记3——用户登录网站(通过session验证登陆用户)
- Servlet实现用户登录页面(通过数据库验证)
- servlet学习笔记3——用户登录网站(通过session验证登陆用户)
- SQLServer - 删除登录账号、数据库用户
- QuickCSharp框架开发(18)------加密用户名和密码数据与数据库读出的密码进行哈希比较(验证用户是否成功登录)
- Servlet实现用户的登录注册+sqlite数据库验证
- Servlet页面登录的数据库验证程序(一)
- csrf攻击过程 csrf攻击说明 1.用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A; 2.在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站
- Servlet课程0425(七) 到数据库中去验证用户,同时防止SQL注入漏洞
- JSP+JavaBean+Servlet技术实现某网站用户注册和登录功能
- 数据库存储过程验证用户登录
- SQLSERVER误删Windows登录用户验证方式使用Windows身份验证的解决方法
- SQLSERVER误删除了Windows登录用户验证方式使用Windows身份验证的解决方法
- Django笔记---用户注册和登录验证(2)--数据库储存
- 使用CAS登录模块连接数据库验证用户合法性
- sqlserver里服务器角色,服务器登录名,数据库用户,数据库角色,数据库架构的理解