实现简单登陆 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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值