Java Web程序Cookie登陆验证

来源:互联网 发布:阿里云工商数据查询 编辑:程序博客网 时间:2024/06/07 06:38

原文地址:http://blog.csdn.net/hufan11100914/article/details/39545837

一个简单的登陆界面,源代码如下:

[javascript] view plain copy
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  
  2.     pageEncoding="UTF-8"%>  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  4. <html>  
  5. <head>  
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  7. <title>Insert title here</title>  
  8. </head>  
  9. <body>  
  10. <h1 style="text-align: center;">用户登陆</h1>  
  11. <center>  
  12.     <form action='/StuDormManager2/LoginServlet' method='post'>  
  13.         用户名: <input type='text' name='username'/><br/>  
  14.         密 码: <input type='password' name='password'/><br/>  
  15.         <input type='submit' value='登陆' /> <br/>  
  16.     </form>     
  17. </center>  
  18. </body>  
  19. </html>  


处理登录验证的服务器端核心代码如下:

[java] view plain copy
  1. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
  2.     response.setContentType("text/html;charset=UTF-8;pageEncoding=UTF-8");  
  3.     response.setCharacterEncoding("UTF-8");  
  4.     DormManager dm=new DormManager();  
  5.     String username=ParamUtil.getParameter(request,"username");  
  6.     String password=ParamUtil.getParameter(request,"password");  
  7.     dm.setName(username);  
  8.     dm.setPassword(password);  
  9.     System.out.println("Name = "+dm.getName());  
  10.     System.out.println("Pass = "+dm.getPassword());  
  11.     if(DBManagerDormManager.checkDormManager(dm)){  
  12.         Cookie username_cookie=new Cookie("username", username);  
  13.         username_cookie.setMaxAge(600);  
  14.         response.addCookie(username_cookie);  
  15.         response.sendRedirect("welcome.jsp");  
  16.     }else{  
  17.         response.sendRedirect("index.jsp");  
  18.     }     
  19. }  

该服务器端代码的功能是:当登录界面的客户端发来登录请求的时候,获得客户端发送过来的用户名和密码并在后台数据库里面进行验证,如果用户名和密码正确,则将其存到cookie中,并跳转到欢迎界面;否则重定向到登录界面

验证用户名和密码是否正确的代码如下:

[java] view plain copy
  1. public static boolean checkDormManager(DormManager dm){  
  2.     Connection con=null;  
  3.     PreparedStatement ps=null;  
  4.     ResultSet rs=null;  
  5.     boolean flag=false;  
  6.     try {  
  7.         con=DataBase.getInstance().getConnection();  
  8.         String sql="select m_password from dorm_manager where m_id=?";  
  9.         ps=con.prepareStatement(sql);  
  10.         ps.setString(1, dm.getName());  
  11.         rs=ps.executeQuery();  
  12.         while(rs.next()){  
  13.             if(rs.getString(1).equals(dm.getPassword())){  
  14.                 flag=true;  
  15.             }  
  16.         }  
  17.     } catch (Exception e) {  
  18.         e.printStackTrace();  
  19.     }finally{  
  20.         DataBase.releaseConnection(con);  
  21.     }  
  22.     return flag;  
  23. }  
在验证用户名和密码的时候连接了MySQL数据库,其代码我也贴出来一下:

[java] view plain copy
  1. package cn.suishou.util;  
  2.   
  3. import java.sql.*;  
  4.   
  5. public class DataBase {  
  6.               
  7.     Connection connect;  
  8.     static DataBase instance = new DataBase();;  
  9.   
  10.     public static DataBase getInstance() {  
  11.         if (instance == null)  
  12.             instance = new DataBase();  
  13.         return instance;  
  14.     }  
  15.       
  16.     public Connection getConnection(){  
  17.         Connection trueConn = null;  
  18.         try {  
  19.             Class.forName("com.mysql.jdbc.Driver");  
  20.             trueConn = DriverManager.getConnection(Config.MysqlUrl, Config.MysqlUser, Config.MysqlPassword);  
  21.         } catch (Exception ex) {  
  22.             ex.printStackTrace();  
  23.         }  
  24.           
  25.         return trueConn;  
  26.     }  
  27.       
  28.     public static void releaseConnection(Connection con){  
  29.         try {  
  30.             con.close();  
  31.         } catch (Exception e) {  
  32.             e.printStackTrace();  
  33.         }  
  34.     }  
  35.   
  36. }  
上面代码中的三个参数Config.MysqlUrl, Config.MysqlUser, Config.MysqlPassword分别表示要连接的数据库地址,登录所需的用户名,以及密码,我写在我的配置文件Config里面,大家如果要用的时候填写上自己的相关信息即可。


做完上面的几个步骤后,剩下了的就只有跳转到的页面需要进行cookie的验证了。

在所有需要登陆后才能显示的页面的最前面加上对cookie的验证,下面是我的代码:

[javascript] view plain copy
  1. <%  
  2. CheckLogin cl=new CheckLogin();  
  3. String name=cl.hasCheckIn(request);  
  4. System.out.println("name="+name);  
  5. if(name!=null){  
  6. %>  
  7.     你好,<%=name %>!  
  8.     <form action='/StuDormManager2/OperateServlet' method='post'>  
  9.         <input type='submit' value='退出  '  name='exit'/><br/>     
  10.     </form>         
  11. <%  
  12. }else{  
  13.     response.sendRedirect("index.jsp");  
  14. }  
  15. %>  
这段代码的功能是:在显示页面之前,先对cookie进行验证,如果存在相应的cookie信息,表示用户已经登录过,那么就显示该页面;否则表示用户没有登陆过,需要重定向到登陆界面.

上面的代码里面有一个CheckLogin ,是用来验证cookie信息的,代码我照样贴出来:

[java] view plain copy
  1. package cn.suishou.util;  
  2.   
  3. import javax.servlet.http.Cookie;  
  4. import javax.servlet.http.HttpServletRequest;  
  5.   
  6. public class CheckLogin {  
  7.   
  8.     public static String hasCheckIn(HttpServletRequest request){  
  9.         boolean flag=false;  
  10.         Cookie myCookie[]=request.getCookies();//创建一个Cookie对象数组  
  11.         String name=null;  
  12.         DBManagerDormManager dd=new DBManagerDormManager();  
  13.         for(int n=0;n<myCookie.length;n++){  
  14.             Cookie newCookie= myCookie[n];  
  15.             if(newCookie.getName().equals("username")){  
  16.                 flag=true;    
  17.                 name=dd.getManagerById(newCookie.getValue());  
  18.             }  
  19.         }  
  20.         return name;  
  21.     }  
  22.       
  23. }  
上面代码的一句:name=dd.getManagerById(newCookie.getValue());是我要通过用户名得到一些信息并返回,这个大家可不必理会,按照各自的实际需要来写即可。