JSP温习笔记——第10章 连接数据库 之 使用JSP基于数据库完成用户登陆程序
JSP复习笔记——第10章 连接数据库 之 使用JSP基于数据库完成用户登陆程序
使用JSP基于数据库完成用户登陆程序
使用Statement存在安全问题:SQL注入漏洞
select * from person where name="darkness" and password="wind" or "1"="1"
密码:wind" or "1"="1
Java代码
1.---------------person.sql----------------------
2.DROP TABLE person ;
3.
4.CREATE TABLE person
5.(
6. id varchar(20) not null primary key ,
7. name varchar(20) not null ,
8. password varchar(20)
9.) ;
10.
11.INSERT INTO person (id,name,password) VALUES ('darkness','wind','ffffff') ;
12.INSERT INTO person (id,name,password) VALUES ('cloud','sky','wind') ;
13.
14.-- 提交事务
15.commit ;
---------------person.sql----------------------
DROP TABLE person ;
CREATE TABLE person
(
id varchar(20) not null primary key ,
name varchar(20) not null ,
password varchar(20)
) ;
INSERT INTO person (id,name,password) VALUES ('darkness','wind','ffffff') ;
INSERT INTO person (id,name,password) VALUES ('cloud','sky','wind') ;
-- 提交事务
commit ;
Java代码
1.--------------------login.jsp-------------
2.<%@page contentType="text/html;charset=gb2312"%>
3.<html>
4.<head>
5. <title>登陆</title>
6.</head>
7.<body>
8.<center>
9. <h1>登陆范例——用户名及密码固定</h1>
10. <hr>
11. <br>
12. <br>
13. <form action="login_conf.jsp" method="post">
14. <table>
15. <tr>
16. <td colspan="2">用户登陆</td>
17. </tr>
18. <tr>
19. <td>用户名:</td>
20. <td><input type="text" name="uname"></td>
21. </tr>
22. <tr>
23. <td>密 码:</td>
24. <td><input type="password" name="upassword"></td>
25. </tr>
26. <tr>
27. <td colspan="2">
28. <input type="submit" value="登陆">
29. <input type="reset" value="重置">
30. </td>
31. </tr>
32. </table>
33. </form>
34.</center>
35.</body>
36.</html>
--------------------login.jsp-------------
<%@page contentType="text/html;charset=gb2312"%>
<html>
<head>
<title>登陆</title>
</head>
<body>
<center>
<h1>登陆范例——用户名及密码固定</h1>
<hr>
<br>
<br>
<form action="login_conf.jsp" method="post">
<table>
<tr>
<td colspan="2">用户登陆</td>
</tr>
<tr>
<td>用户名:</td>
<td><input type="text" name="uname"></td>
</tr>
<tr>
<td>密 码:</td>
<td><input type="password" name="upassword"></td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="登陆">
<input type="reset" value="重置">
</td>
</tr>
</table>
</form>
</center>
</body>
</html>
Java代码
1.-----------------------login_conf.jsp------------
2.<%@ page contentType="text/html;charset=gb2312"%>
3.<%-- 导入java.sql包,表示要使用数据库操作 --%>
4.<%@ page import="java.sql.*"%>
5.<html>
6.<head>
7. <title>登陆</title>
8.</head>
9.<body>
10.<center>
11. <h1>登陆范例——用户名及密码固定</h1>
12. <hr>
13. <br>
14. <br>
15. <%
16. // 接收请求的内容
17. String name = request.getParameter("uname") ;
18. String password = request.getParameter("upassword") ;
19.
20. // 定义变量,如果用户是合法用户,则将此标记变为true
21. boolean flag = false ;
22. %>
23. <%
24. // 定义数据库操作的常量、对象
25. // 数据库驱动程序
26. final String DBDRIVER = "oracle.jdbc.driver.OracleDriver" ;
27. // 数据库连接地址
28. final String DBURL = "jdbc:oracle:thin:@localhost:1521:sky" ;
29. // 数据库用户名
30. final String DBUSER = "scott" ;
31. // 数据库连接密码
32. final String DBPASSWORD = "darkness" ;
33. // 声明一个数据库连接对象
34. Connection conn = null ;
35. // 声明一个数据库操作对象
36. PreparedStatement pstmt = null ;
37. // 声明一个结果集对象
38. ResultSet rs = null ;
39. // 声明一个SQL变量,用于保存SQL语句
40. String sql = null ;
41. %>
42. <%
43. // 进行数据库操作
44. try {
45. // 编写SQL语句
46. sql = "SELECT name FROM person WHERE id=? and password=?" ;
47. // 加载驱动程序
48. Class.forName(DBDRIVER) ;
49. // 连接数据库
50. conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD) ;
51. // 实例化数据库操作对象
52. pstmt = conn.prepareStatement(sql) ;
53. // 设置pstmt的内容
54. pstmt.setString(1,name) ;
55. pstmt.setString(2,password) ;
56. // 查询记录
57. rs = pstmt.executeQuery() ;
58. // 判断是否有记录
59. if(rs.next())
60. {
61. // 如果有记录,则执行此段代码
62. // 用户是合法的,可以登陆
63. flag = true ;
64. }
65. // 依次关闭
66. rs.close() ;
67. pstmt.close() ;
68. conn.close() ;
69. }catch(Exception e){
70.}
71. %>
72. <%
73. // 判断用户名及密码
74. if(flag) {
75. // 合法用户
76. %>
77. <jsp:forward page="login_success.jsp"/>
78. <%
79. } else {
80. // 非法用户
81. %>
82. <jsp:forward page="login_failure.jsp"/>
83. <%
84. }
85. %>
86.</center>
87.</body>
88.</html>
-----------------------login_conf.jsp------------
<%@ page contentType="text/html;charset=gb2312"%>
<%-- 导入java.sql包,表示要使用数据库操作 --%>
<%@ page import="java.sql.*"%>
<html>
<head>
<title>登陆</title>
</head>
<body>
<center>
<h1>登陆范例——用户名及密码固定</h1>
<hr>
<br>
<br>
<%
// 接收请求的内容
String name = request.getParameter("uname") ;
String password = request.getParameter("upassword") ;
// 定义变量,如果用户是合法用户,则将此标记变为true
boolean flag = false ;
%>
<%
// 定义数据库操作的常量、对象
// 数据库驱动程序
final String DBDRIVER = "oracle.jdbc.driver.OracleDriver" ;
// 数据库连接地址
final String DBURL = "jdbc:oracle:thin:@localhost:1521:sky" ;
// 数据库用户名
final String DBUSER = "scott" ;
// 数据库连接密码
final String DBPASSWORD = "darkness" ;
// 声明一个数据库连接对象
Connection conn = null ;
// 声明一个数据库操作对象
PreparedStatement pstmt = null ;
// 声明一个结果集对象
ResultSet rs = null ;
// 声明一个SQL变量,用于保存SQL语句
String sql = null ;
%>
<%
// 进行数据库操作
try {
// 编写SQL语句
sql = "SELECT name FROM person WHERE id=? and password=?" ;
// 加载驱动程序
Class.forName(DBDRIVER) ;
// 连接数据库
conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD) ;
// 实例化数据库操作对象
pstmt = conn.prepareStatement(sql) ;
// 设置pstmt的内容
pstmt.setString(1,name) ;
pstmt.setString(2,password) ;
// 查询记录
rs = pstmt.executeQuery() ;
// 判断是否有记录
if(rs.next())
{
// 如果有记录,则执行此段代码
// 用户是合法的,可以登陆
flag = true ;
}
// 依次关闭
rs.close() ;
pstmt.close() ;
conn.close() ;
}catch(Exception e){
}
%>
<%
// 判断用户名及密码
if(flag) {
// 合法用户
%>
<jsp:forward page="login_success.jsp"/>
<%
} else {
// 非法用户
%>
<jsp:forward page="login_failure.jsp"/>
<%
}
%>
</center>
</body>
</html>
Java代码
1.----------------------login_success.jsp-------------
2.<%@page contentType="text/html;charset=gb2312"%>
3.<html>
4.<head>
5. <title>登陆</title>
6.</head>
7.<body>
8.<center>
9. <h1>登陆范例——用户名及密码固定</h1>
10. <hr>
11. <br>
12. <br>
13. <h2>登陆成功</h2>
14. <h3>欢迎<font color="red" size="15">
15. <%=request.getParameter("uname")%>
16. </font>光临!!!</h3>
17.</center>
18.</body>
19.</html>
20.------------------login_failure.jsp-------------
21.<%@page contentType="text/html;charset=gb2312"%>
22.<html>
23.<head>
24. <title>登陆</title>
25.</head>
26.<body>
27.<center>
28. <h1>登陆范例——用户名及密码固定</h1>
29. <hr>
30. <br>
31. <br>
32. <h2>登陆失败</h2>
33. <h3>错误的用户名及密码!!!</h3>
34. <a href="login.jsp">重新登陆</a>
35.</center>
36.</body>
37.</html>
使用JSP基于数据库完成用户登陆程序
使用Statement存在安全问题:SQL注入漏洞
select * from person where name="darkness" and password="wind" or "1"="1"
密码:wind" or "1"="1
Java代码
1.---------------person.sql----------------------
2.DROP TABLE person ;
3.
4.CREATE TABLE person
5.(
6. id varchar(20) not null primary key ,
7. name varchar(20) not null ,
8. password varchar(20)
9.) ;
10.
11.INSERT INTO person (id,name,password) VALUES ('darkness','wind','ffffff') ;
12.INSERT INTO person (id,name,password) VALUES ('cloud','sky','wind') ;
13.
14.-- 提交事务
15.commit ;
---------------person.sql----------------------
DROP TABLE person ;
CREATE TABLE person
(
id varchar(20) not null primary key ,
name varchar(20) not null ,
password varchar(20)
) ;
INSERT INTO person (id,name,password) VALUES ('darkness','wind','ffffff') ;
INSERT INTO person (id,name,password) VALUES ('cloud','sky','wind') ;
-- 提交事务
commit ;
Java代码
1.--------------------login.jsp-------------
2.<%@page contentType="text/html;charset=gb2312"%>
3.<html>
4.<head>
5. <title>登陆</title>
6.</head>
7.<body>
8.<center>
9. <h1>登陆范例——用户名及密码固定</h1>
10. <hr>
11. <br>
12. <br>
13. <form action="login_conf.jsp" method="post">
14. <table>
15. <tr>
16. <td colspan="2">用户登陆</td>
17. </tr>
18. <tr>
19. <td>用户名:</td>
20. <td><input type="text" name="uname"></td>
21. </tr>
22. <tr>
23. <td>密 码:</td>
24. <td><input type="password" name="upassword"></td>
25. </tr>
26. <tr>
27. <td colspan="2">
28. <input type="submit" value="登陆">
29. <input type="reset" value="重置">
30. </td>
31. </tr>
32. </table>
33. </form>
34.</center>
35.</body>
36.</html>
--------------------login.jsp-------------
<%@page contentType="text/html;charset=gb2312"%>
<html>
<head>
<title>登陆</title>
</head>
<body>
<center>
<h1>登陆范例——用户名及密码固定</h1>
<hr>
<br>
<br>
<form action="login_conf.jsp" method="post">
<table>
<tr>
<td colspan="2">用户登陆</td>
</tr>
<tr>
<td>用户名:</td>
<td><input type="text" name="uname"></td>
</tr>
<tr>
<td>密 码:</td>
<td><input type="password" name="upassword"></td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="登陆">
<input type="reset" value="重置">
</td>
</tr>
</table>
</form>
</center>
</body>
</html>
Java代码
1.-----------------------login_conf.jsp------------
2.<%@ page contentType="text/html;charset=gb2312"%>
3.<%-- 导入java.sql包,表示要使用数据库操作 --%>
4.<%@ page import="java.sql.*"%>
5.<html>
6.<head>
7. <title>登陆</title>
8.</head>
9.<body>
10.<center>
11. <h1>登陆范例——用户名及密码固定</h1>
12. <hr>
13. <br>
14. <br>
15. <%
16. // 接收请求的内容
17. String name = request.getParameter("uname") ;
18. String password = request.getParameter("upassword") ;
19.
20. // 定义变量,如果用户是合法用户,则将此标记变为true
21. boolean flag = false ;
22. %>
23. <%
24. // 定义数据库操作的常量、对象
25. // 数据库驱动程序
26. final String DBDRIVER = "oracle.jdbc.driver.OracleDriver" ;
27. // 数据库连接地址
28. final String DBURL = "jdbc:oracle:thin:@localhost:1521:sky" ;
29. // 数据库用户名
30. final String DBUSER = "scott" ;
31. // 数据库连接密码
32. final String DBPASSWORD = "darkness" ;
33. // 声明一个数据库连接对象
34. Connection conn = null ;
35. // 声明一个数据库操作对象
36. PreparedStatement pstmt = null ;
37. // 声明一个结果集对象
38. ResultSet rs = null ;
39. // 声明一个SQL变量,用于保存SQL语句
40. String sql = null ;
41. %>
42. <%
43. // 进行数据库操作
44. try {
45. // 编写SQL语句
46. sql = "SELECT name FROM person WHERE id=? and password=?" ;
47. // 加载驱动程序
48. Class.forName(DBDRIVER) ;
49. // 连接数据库
50. conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD) ;
51. // 实例化数据库操作对象
52. pstmt = conn.prepareStatement(sql) ;
53. // 设置pstmt的内容
54. pstmt.setString(1,name) ;
55. pstmt.setString(2,password) ;
56. // 查询记录
57. rs = pstmt.executeQuery() ;
58. // 判断是否有记录
59. if(rs.next())
60. {
61. // 如果有记录,则执行此段代码
62. // 用户是合法的,可以登陆
63. flag = true ;
64. }
65. // 依次关闭
66. rs.close() ;
67. pstmt.close() ;
68. conn.close() ;
69. }catch(Exception e){
70.}
71. %>
72. <%
73. // 判断用户名及密码
74. if(flag) {
75. // 合法用户
76. %>
77. <jsp:forward page="login_success.jsp"/>
78. <%
79. } else {
80. // 非法用户
81. %>
82. <jsp:forward page="login_failure.jsp"/>
83. <%
84. }
85. %>
86.</center>
87.</body>
88.</html>
-----------------------login_conf.jsp------------
<%@ page contentType="text/html;charset=gb2312"%>
<%-- 导入java.sql包,表示要使用数据库操作 --%>
<%@ page import="java.sql.*"%>
<html>
<head>
<title>登陆</title>
</head>
<body>
<center>
<h1>登陆范例——用户名及密码固定</h1>
<hr>
<br>
<br>
<%
// 接收请求的内容
String name = request.getParameter("uname") ;
String password = request.getParameter("upassword") ;
// 定义变量,如果用户是合法用户,则将此标记变为true
boolean flag = false ;
%>
<%
// 定义数据库操作的常量、对象
// 数据库驱动程序
final String DBDRIVER = "oracle.jdbc.driver.OracleDriver" ;
// 数据库连接地址
final String DBURL = "jdbc:oracle:thin:@localhost:1521:sky" ;
// 数据库用户名
final String DBUSER = "scott" ;
// 数据库连接密码
final String DBPASSWORD = "darkness" ;
// 声明一个数据库连接对象
Connection conn = null ;
// 声明一个数据库操作对象
PreparedStatement pstmt = null ;
// 声明一个结果集对象
ResultSet rs = null ;
// 声明一个SQL变量,用于保存SQL语句
String sql = null ;
%>
<%
// 进行数据库操作
try {
// 编写SQL语句
sql = "SELECT name FROM person WHERE id=? and password=?" ;
// 加载驱动程序
Class.forName(DBDRIVER) ;
// 连接数据库
conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD) ;
// 实例化数据库操作对象
pstmt = conn.prepareStatement(sql) ;
// 设置pstmt的内容
pstmt.setString(1,name) ;
pstmt.setString(2,password) ;
// 查询记录
rs = pstmt.executeQuery() ;
// 判断是否有记录
if(rs.next())
{
// 如果有记录,则执行此段代码
// 用户是合法的,可以登陆
flag = true ;
}
// 依次关闭
rs.close() ;
pstmt.close() ;
conn.close() ;
}catch(Exception e){
}
%>
<%
// 判断用户名及密码
if(flag) {
// 合法用户
%>
<jsp:forward page="login_success.jsp"/>
<%
} else {
// 非法用户
%>
<jsp:forward page="login_failure.jsp"/>
<%
}
%>
</center>
</body>
</html>
Java代码
1.----------------------login_success.jsp-------------
2.<%@page contentType="text/html;charset=gb2312"%>
3.<html>
4.<head>
5. <title>登陆</title>
6.</head>
7.<body>
8.<center>
9. <h1>登陆范例——用户名及密码固定</h1>
10. <hr>
11. <br>
12. <br>
13. <h2>登陆成功</h2>
14. <h3>欢迎<font color="red" size="15">
15. <%=request.getParameter("uname")%>
16. </font>光临!!!</h3>
17.</center>
18.</body>
19.</html>
20.------------------login_failure.jsp-------------
21.<%@page contentType="text/html;charset=gb2312"%>
22.<html>
23.<head>
24. <title>登陆</title>
25.</head>
26.<body>
27.<center>
28. <h1>登陆范例——用户名及密码固定</h1>
29. <hr>
30. <br>
31. <br>
32. <h2>登陆失败</h2>
33. <h3>错误的用户名及密码!!!</h3>
34. <a href="login.jsp">重新登陆</a>
35.</center>
36.</body>
37.</html>