1. 程式人生 > >實現簡單登陸 session繫結控制

實現簡單登陸 session繫結控制

實現登陸

先建立一個儲存使用者的表

mysql> create table user(
    -> id int primary key auto_increment,
    -> username varchar(50) unique,
    -> pwd varchar(30),
    -> name varchar(250),
    -> gender char(1)
    -> );
Query OK, 0 rows affected (0.17 sec)

注意:unique 唯一性約束,讓使用者名稱唯一。
增加使用者

insert
into user(username,pwd,name,gender) values(‘Recar’,’123456’,’Recar’,’m’);

寫一個登陸.jsp 和登陸成功.jsp

要做錯誤判斷。最後做session驗證。

這裡寫圖片描述

在登陸成功後,在session上繫結個user。然後在success.jsp頁面進行判斷是否有這個繫結的,有就繼續執行。沒有則跳轉到登陸介面。並且方法返回。不在繼續執行。

實現:
先輸入logon.do或者logon.jsp
然後進行登陸。post將資料提交給控制器 ActionServlet。進行判斷。是否有這個使用者。然後在判斷密碼是否正確。通過DAO來操作資料庫。存在並且密碼正確進入success.jsp頁面。不成功則重定向到登陸介面

。在success.jsp頁面也進行判斷。是否有session,並且這個session繫結有user。有就可以進入這個頁面。沒有則跳轉到登陸介面。返回方法

這裡寫圖片描述

UserDao.java

package dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import entity.User;
import util.DBUtil;
public class UserDao {
    public User findByUsername(String username) throws
Exception{ User user =null; Connection conn =null; PreparedStatement prep = null; ResultSet rst = null; try{ conn = DBUtil.getConnection(); prep = conn.prepareStatement("select * from user where username=?"); prep.setString(1, username); rst = prep.executeQuery(); if(rst.next()){ user = new User(); user.setId(rst.getInt("id")); user.setUsername(username); user.setPwd(rst.getString("pwd")); user.setName(rst.getString("name")); user.setGender(rst.getString("gender")); } }catch(Exception e){ e.printStackTrace(); throw e; }finally{ DBUtil.close(conn); } return user; } public static void main (String[] args) throws Exception{ UserDao ud = new UserDao(); User user =ud.findByUsername("ddd"); System.out.println(user); } }

User.java

package entity;
/**
 * 實體類
 * @author Administrator
 *
 */
public class User {
    private int id;
    private String username;
    private String pwd;
    private String name;

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPwd() {
        return pwd;
    }
    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getGender() {
        return gender;
    }
    public void setGender(String gender) {
        this.gender = gender;
    }
    private String gender;

    @Override
    public String toString() {

        return id+""+username+""+pwd+""+name+""+gender;
    }


}

DBUtil.java

package util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;


/**
 * JDBC工具類:
 *  提供了獲得連線,關閉連線的相關的方法。
 * @author Administrator
 *
 */
public class DBUtil {
    //獲得連線
    public static Connection getConnection(){
        Connection conn =null;

        try {
            Class.forName("com.mysql.jdbc.Driver");

        conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jsd1507db", "root", "root");



        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            try {

                //將異常丟擲!是分層的,本層不解決也不直接去顯示,而是拋給他的下一層
                throw e;
            } catch (Exception e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
        }

        return conn;

    }
    //關閉連線
    public static void close(Connection conn){

        if(conn!=null){

        }
            try {

                conn.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();

            }

    }
    //寫個主方法,可以檢測是否成功拿到conn
    public static void main(String[] args){
        Connection conn = getConnection();
        System.out.println(conn);

    }




}

ActionServlet.java

package web;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import dao.UserDao;
import entity.User;

public class ActionServlet extends HttpServlet {

    public void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
    //分享請求資源路徑
        String uri = request.getRequestURI();
        String action = uri.substring(uri.lastIndexOf("/"),uri.lastIndexOf("."));
        System.out.println("URI!!!"+action);
        if("/logon".equals(action)){
            //讀取使用者名稱和密碼
            String username = request.getParameter("username");
            String password = request.getParameter("password");
            System.out.println(username);
            //根據使用者名稱和密碼查詢資料庫中是否有這個使用者
            UserDao ud = new UserDao();
            try {
                User user = ud.findByUsername(username);
                if(user!=null&& password.equals(user.getPwd())){
                     //使用者有,並且密碼對了。登陸成功!
                    HttpSession session = request.getSession();
                    session.setAttribute("user", username);
                    response.sendRedirect("success.jsp");

                }else{
                    out.print("使用者名稱或者密碼錯誤");
                    response.sendRedirect("logon.jsp");

                }


            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                throw new ServletException(e);
            }

        }


        out.close();
    }

}

logon.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>使用者登陸檢測</title>

<style type="text/css">
body {
    background-image: url(ruidian_sidegeermo_fengjing.jpg);
    background-attachment: fixed;
    background-repeat: no-repeat;
    background-size: 100% 100%;
    color: #FFF;
    font-family: "微軟雅黑";
    font-size: 1.6em;
}
#div1 {
    margin: 120px;
    margin-left: 530px;
    text-align: center;
    width: 200px;
    height: 200px;
}
#div2 {
    background-image: url(1.png);
    background-repeat: no-repeat;
    height: 100px;
    margin-top: 120px;
    margin-left: 580px;
    width: 200px;
}
span {
    font-size: 9px;
}
#b1 {
}
</style>
</head>

<body>
<div id="div2"></div>
<div id="div1">
  <form action="logon.do"  method="post">
    <p>
      <label for="username">使用者名稱</label>
      <input type="text" name="username"  />
    </p>
    <p>
      <label for="password">密碼</label>
      <input type="password" name="password"/>
    </p>
    <input type="submit" value="登陸" />
    <p> <span id="span"></span> </p>
  </form>
</div>
</body>
</html>

success.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

 <%
Object obj = session.getAttribute("user");
if(obj==null){
response.sendRedirect("logon.do");
//但是後面的java程式碼還會執行。。。。於是
return ;
}
 %> 


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Recar的網址導航~</title>
<style type="text/css">
body{ background-image:url(ruidian_sidegeermo_fengjing.jpg);background-attachment:fixed;background-repeat:no-repeat;
background-size:100%;font-family:'微軟雅黑';color:#FFF;
}
a{color:#FFF;text-decoration:none;margin:50px;
}
div{width:100%;height:200px; border:1px solid #000;}
table{margin-left:150px;}
div p{font-size:20px;}
#myblog a{color:#FFF;text-decoration:none;text-align:center;}


</style>


</head>

<body>

<br/>
<div > 

<p >安全:</p>
<table>
<tr>
<td><a href="http://www.wooyun.org/" target="_blank">烏雲</a></td>
<td><a href="http://butian.360.cn/" target="_blank">補天</a></td>
<td><a href="https://www.vulbox.com/" target="_blank">漏洞盒子</a></td>
<td><a href="http://bobao.360.cn/index/index"target="_blank">安全客</a></td>
<td><a href="https://www.91ri.org/" target="_blank">91安全指南</a></td>
<td><a href="http://www.52pojie.cn/" target="_blank">吾愛破解</a></td>

</tr>

<tr>
<td><a href="http://bbs.sssie.com/forum.php" target="_blank">SSS</a></td>
<td><a href="http://www.bugscan.net/combbs/template/node/#/3">BugScan</a></td>
<td><a href="https://www.secpulse.com/" target="_blank">安全脈搏</a></td>
<td><a href="http://www.bugbank.cn/pwn/" target="_blank">漏洞銀行</a></td>
<td><a href="http://www.freebuf.com/" target="_blank">Freebuf</a></td>
<td><a href="http://www.moonsafe.com/forum.php" target="_blank">暗月論壇</a></td>


</tr>

<tr>
<td><a href="https://www.sec-wiki.com/skill/2" target="_blank">技能表</a></td>
<td><a href="http://www.evil0x.com/">邪惡十六進位制</a></td>
<td><a href="http://www.52bug.cn/" target="_blank">吾愛漏洞</a></td>
<td><a href="http://www.pkav.net/#" target="_blank">PKAV</a></td>
<td><a href="http://www.shgcx.org/" target="_blank">社工論壇</a></td>
<td><a href="http://bbs.pediy.com/" target="_blank">看雪</a></td>


</tr>


</table>
</div>
<div >
 <p >python</p >
 <table>
<tr>
<td><a href="https://github.com/Yixiaohan/show-me-the-code" target="_blank">Python小題目</a></td>
<td><a href="http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000" target="_blank">廖雪峰的Python</a></td>
<td><a href="https://www.vulbox.com/" target="_blank">漏洞盒子</a></td>
<td><a href="http://bobao.360.cn/index/index" target="_blank">安全客</a></td>
<td><a href="https://www.91ri.org/" target="_blank">91安全指南</a></td>
</tr>

<tr>
<td><a href="">1</a></td>
<td><a href="">1</a></td>
<td><a href="">1</a></td>
<td><a href="">1</a></td>
<td><a href="">1</a></td>
</tr>
</table>


 </div>
<div >
<p> java</p>


 <table>
<tr>
<td><a href="http://edu.51cto.com/roadmap/view/id-86.html" target="_blank">java學習路線</a></td>
<td><a href="http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000" target="_blank">廖雪峰的Python</a></td>
<td><a href="https://www.vulbox.com/" target="_blank">漏洞盒子</a></td>
<td><a href="http://bobao.360.cn/index/index" target="_blank">安全客</a></td>
<td><a href="https://www.91ri.org/" target="_blank">91安全指南</a></td>
</tr>

<tr>
<td><a href="">1</a></td>
<td><a href="">1</a></td>
<td><a href="">1</a></td>
<td><a href="">1</a></td>
<td><a href="">1</a></td>
</tr>
</table>

</div>

<div id="myblog"> <a href="http://blog.csdn.net/qq_28295425"  target="_blank">我的CSDN</a></div>
</body>
</html>

效果:

登陸:
這裡寫圖片描述

這裡寫圖片描述
登陸成功!
這裡寫圖片描述

沒有進行登陸的話就不能獲取繫結user的session。就不能進入success.jsp