`

JSP复习笔记——第10章 连接数据库 之 使用JSP基于数据库完成用户登陆程序

    博客分类:
  • 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>密&nbsp;&nbsp;码:</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>密&nbsp;&nbsp;码:</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> 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics