實現簡單登陸 session繫結控制
阿新 • • 發佈:2019-02-10
實現登陸
先建立一個儲存使用者的表
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頁面。不成功則重定向到登陸介面
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