您的位置:首页 > 其它

实现简单登陆 session绑定控制

2016-12-08 20:44 465 查看

实现登陆

先创建一个存储用户的表

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: