java 自動登陸代碼

javaBean的代碼
  
package bean;
  
import java.io.Serializable;
  
public class Admin implements Serializable{
      
     /**
     
      */
     private static final long serialVersionUID = 1L;
     private Integer id;
     private String name;
     private String pass;
  
     public Admin() {
         super ();
         // TODO Auto-generated constructor stub
     }
  
     public Admin(Integer id, String name, String pass) {
         super ();
         this .id = id;
         this .name = name;
         this .pass = pass;
     }
  
     public Integer getId() {
         return id;
     }
  
     public void setId(Integer id) {
         this .id = id;
     }
  
     public String getName() {
         return name;
     }
  
     public void setName(String name) {
         this .name = name;
     }
  
     public String getPass() {
         return pass;
     }
  
     public void setPass(String pass) {
         this .pass = pass;
     }
  
     @Override
     public String toString() {
         return "AdminBean [id=" + id + ", name=" + name + ", pass=" + pass
                 + "]" ;
     }
  
}

 

dao的基礎接口類
  
package dao;
  
import java.util.List;
  
public interface BaseDao<T, PK> {
     /**
      * 插入數據
      */
     boolean insert(T entity);
  
     /**
      * 根據實體刪除數據
      */
     boolean delete(T entity);
  
     /**
      * 根據ID刪除數據
      */
     boolean deleteById(PK id);
  
     /**
      * 修改數據
      */
     boolean update(T entity);
  
     /**
      * 查詢全部數據
      */
     List<T> findAll();
  
     /**
      * 根據ID查詢數據
      */
     T findById(PK id);
  
     /**
      * 根據當前頁查詢數據
      */
     List<T> findNowPageInfo( int nowpage, int pagesize,String sortName,String sortOrder);
  
     /**
      * 返回總頁數
      */
     Integer getCountPage( int pagesize);
  
     /**
      * 批量刪除
      */
  
     boolean deletes(Object ids[]);
  
}

 

對admin操做的接口類,繼承自basedao
  
package dao;
  
import bean.Admin;
  
public interface AdminDao extends BaseDao {
     Admin checkLogin(String name,String pass);
     Admin checkLogin(String name);
      
}
dao操做實體的實現類
  
package daoImpl;
  
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
  
import util.JdbcUtil;
import bean.Admin;
import dao.AdminDao;
  
public class AdminDaoImpl implements AdminDao {
  
     private Connection conn;
     private PreparedStatement pstmt;
     private ResultSet rs;
  
     @Override
     public boolean insert(Admin entity) {
         return JdbcUtil.upDate( "insert into admin (name,pass) values (?,?)" ,
                 new Object[] { entity.getName(), entity.getPass() });
     }
  
     @Override
     public boolean delete(Admin entity) {
         // TODO Auto-generated method stub
         return deleteById(entity.getId());
     }
  
     @Override
     public boolean deleteById(Integer id) {
         // TODO Auto-generated method stub
         return JdbcUtil.upDate( "delete from admin where id=?" ,
                 new Object[] { id });
     }
  
     @Override
     public boolean update(Admin entity) {
         // TODO Auto-generated method stub
         return JdbcUtil.upDate(
                 "update admin set name=?,pass=? where id=?" ,
                 new Object[] { entity.getName(), entity.getPass(),
                         entity.getId() });
     }
  
     @Override
     public List findAll() {
         // TODO Auto-generated method stub
         return null ;
     }
  
     @Override
     public Admin findById(Integer id) {
         // TODO Auto-generated method stub
         return null ;
     }
  
     @Override
     public List findNowPageInfo( int nowpage, int pagesize,
             String sortName, String sortOrder) {
         // TODO Auto-generated method stub
         return null ;
     }
  
     @Override
     public Integer getCountPage( int pagesize) {
         // TODO Auto-generated method stub
         return null ;
     }
  
     @Override
     public boolean deletes(Object[] ids) {
         // TODO Auto-generated method stub
         return false ;
     }
  
     @Override
     public Admin checkLogin(String name, String pass) {
         // TODO Auto-generated method stub
         Admin entity = null ;
         String sql = "select * from admin where name=? and pass=?" ;
         conn = JdbcUtil.getConn();
         try {
             pstmt = conn.prepareStatement(sql);
             int index = 1 ;
             pstmt.setString(index++, name);
             pstmt.setString(index++, pass);
             rs = pstmt.executeQuery();
  
             if (rs.next()) {
                 entity = new Admin();
                 entity.setId(rs.getInt( "id" ));
                 entity.setName(rs.getString( "name" ));
                 entity.setPass(rs.getString( "pass" ));
             }
         } catch (SQLException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         } finally {
             JdbcUtil.release(rs, pstmt);
         }
         return entity;
     }
  
     @Override
     public Admin checkLogin(String name) {
         Admin entity = null ;
         String sql = "select * from admin where name=?" ;
         conn = JdbcUtil.getConn();
         try {
             pstmt = conn.prepareStatement(sql);
             int index = 1 ;
             pstmt.setString(index++, name);
             rs = pstmt.executeQuery();
             if (rs.next()) {
                 entity = new Admin();
                 entity.setId(rs.getInt( "id" ));
                 entity.setName(rs.getString( "name" ));
                 entity.setPass(rs.getString( "pass" ));
             }
         } catch (SQLException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         } finally {
             JdbcUtil.release(rs, pstmt);
         }
         return entity;
     }
  
}

 

服務器接口類,用來將操做數據庫的方法與記錄歷史的方法或其餘的方法分離開,做用是加強代碼的可讀性以及條理性,
  
package service;
  
import java.util.List;
  
public interface BaseService<T, PK> {
     /**
      * 插入數據
      */
     boolean insert(T entity);
  
     /**
      * 根據實體刪除數據
      */
     boolean delete(T entity);
  
     /**
      * 根據ID刪除數據
      */
     boolean deleteById(PK id);
  
     /**
      * 修改數據
      */
     boolean update(T entity);
  
     /**
      * 查詢全部數據
      */
     List<T> findAll();
  
     /**
      * 根據ID查詢數據
      */
     T findById(PK id);
  
     /**
      * 根據當前頁查詢數據
      */
     List<T> findNowPageInfo( int nowpage, int pagesize,String sortName,String sortOrder);
  
     /**
      * 返回總頁數
      */
     Integer getCountPage( int pagesize);
  
     /**
      * 批量刪除
      */
  
     boolean deletes(Object ids[]);
  
}
  
package service;
  
import bean.Admin;
  
public interface AdminService extends BaseService {
     Admin checkLogin(String name,String pass);
     Admin checkLogin(String name);
}
實現服務器接口方法的實現類
  
package serviceImpl;
  
import java.util.List;
  
import dao.AdminDao;
import daoImpl.AdminDaoImpl;
  
import bean.Admin;
import service.AdminService;
  
public class AdminServiceImpl implements AdminService {
     AdminDao adminDao = new AdminDaoImpl();
  
     @Override
     public boolean insert(Admin entity) {
         return adminDao.insert(entity);
     }
  
     @Override
     public boolean delete(Admin entity) {
         return false ;
     }
  
     @Override
     public boolean deleteById(Integer id) {
         return false ;
     }
  
     @Override
     public boolean update(Admin entity) {
         return false ;
     }
  
     @Override
     public List findAll() {
         return null ;
     }
  
     @Override
     public Admin findById(Integer id) {
         return null ;
     }
  
     @Override
     public List findNowPageInfo( int nowpage, int pagesize,
             String sortName, String sortOrder) {
         return null ;
     }
  
     @Override
     public Integer getCountPage( int pagesize) {
         return null ;
     }
  
     @Override
     public boolean deletes(Object[] ids) {
         return false ;
     }
  
     @Override
     public Admin checkLogin(String name, String pass) {
         Admin entity = adminDao.checkLogin(name, pass);
         return entity;
     }
  
     @Override
     public Admin checkLogin(String name) {
         Admin entity = adminDao.checkLogin(name);
         return entity;
     }
  
}
用來將頁面傳入的信息進行分析處理的服務器類,
package servlet;
  
import java.io.IOException;
import java.net.URLEncoder;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
  
import javax.jms.Message;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
  
import com.sun.mail.util.BASE64DecoderStream;
import com.sun.mail.util.BASE64EncoderStream;
  
import service.AdminService;
import serviceImpl.AdminServiceImpl;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import bean.Admin;
  
public class AdminServlet extends HttpServlet {
  
     private AdminService adminService = new AdminServiceImpl();
  
     // 規定時間常量,爲一天
     private final int EXPIRES =  60 * 60 * 24 ;
  
     public void doGet(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
         // request.setCharacterEncoding("UTF-8");
  
         String oper = request.getParameter( "oper" );
         if ( "adminLogin" .equals(oper)) {
             adminLogin(request, response);
         }
         if ( "login" .equals(oper)) {
             request.getRequestDispatcher( "./login.jsp" ).forward(request,
                     response);
         }
  
     }
  
     private void adminLogin(HttpServletRequest request,
             HttpServletResponse response) throws ServletException, IOException {
          
         //獲取表單提交的數據
         String name = request.getParameter( "name" );
         String pass = request.getParameter( "pass" );
         String mark = request.getParameter( "mark" );
         String day = request.getParameter( "day" );
  
//      System.out.println(name + "====" + pass + "====" + mark
//              + "============" + day);
  
         //根據獲取的數據向數據庫發送數據請求,
         Admin entity = adminService.checkLogin(name, pass);
  
         //判斷查詢結果
         if (entity != null ) {
             //判斷用戶是否進行記錄密碼和自動登錄的操做
             if ( "mark" .equals(mark)) {
                 // 獲取當前的時間並加上要保存的時間長度
                 long time = System.currentTimeMillis()
                         + (EXPIRES * Integer.valueOf(day)* 1000 );
  
                 // 聲明cookie
                 Cookie autoCookie = null ;
                 // 獲取全部的cookie的數組
                 Cookie cookies[] = request.getCookies();
                 // 遍歷判斷
                 for (Cookie cookie : cookies) {
                     // 判斷是否已經存在cookie記錄
                     if ( "autoLogin" .equals(cookie.getName())) {
                         // 存在即直接賦值
                         autoCookie = cookie;
                         // 並改變內容
                         String newValue = name
                                 + ":"
                                 + time
                                 + ":"
                                 + md5Value(pass + ":" + name + ":" + time
                                         + ":donghongyujava" );
                         autoCookie.setValue(newValue);
                     } else {
                         String cookieValue = name
                                 + ":"
                                 + time
                                 + ":"
                                 + md5Value(pass + ":" + name + ":" + time
                                         + ":donghongyujava" );
                         /*
                          * Control character in cookie value or attribute.
                          * 當存入的數據是中文時,cookie會出現亂碼現象 須要進行編碼的轉換
                          */
                         autoCookie = new Cookie( "autoLogin" , URLEncoder.encode(
                                 cookieValue, "UTF-8" ));
                     }
                 }
                 // 設置cookie的最長的存活時間
                 autoCookie.setMaxAge(EXPIRES * Integer.valueOf(day));
                 response.addCookie(autoCookie);
             }
             // 將admin存入到session
             request.getSession().setAttribute( "admin" , entity);
             // 設置成功後就登錄操做
             request.getRequestDispatcher( "./sc.jsp" ).forward(request, response);
         } else {
              
             request.setAttribute( "msg" , "用戶名或密碼錯誤請重試" );
             request.getRequestDispatcher( "./login.jsp" ).forward(request,
                     response);
         }
     }
  
     public void doPost(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
         this .doGet(request, response);
     }
  
     //加密的操做方法
     public String md5Value(String value) {
         try {
             // 獲取md5加密的對象
             MessageDigest digest = MessageDigest.getInstance( "md5" );
             // 將傳入的數據裝換爲byte字節,在用digest進行轉換(加密)成新的字節數組,
             byte result[] = digest.digest(value.getBytes());
             //須要的jdk版本myeclipse2013中自帶的com.sun.java.jdk.win32.x86_64_1.6.0.u43
             //jdk1.7.0_25沒有相關的包
             BASE64Encoder encoder = new BASE64Encoder();
             // 返回加密後的數據
             return encoder.encode(result);
         } catch (NoSuchAlgorithmException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         }
         return "" ;
     };
  
}

 

過濾器類,用來設置請求的編碼
package filter;
  
import java.io.IOException;
  
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
  
public class EncodingFilter implements Filter {
     private FilterConfig filterConfig;
  
     @Override
     public void destroy() {
         // TODO Auto-generated method stub
     }
  
     @Override
     public void doFilter(ServletRequest req, ServletResponse res,
             FilterChain chain) throws IOException, ServletException {
         HttpServletRequest request = (HttpServletRequest) req;
         HttpServletResponse response = (HttpServletResponse) res;
         // 編碼的設置
         request.setCharacterEncoding(filterConfig.getInitParameter( "encoding" ));
         chain.doFilter(request, response);
     }
  
     @Override
     public void init(FilterConfig filterConfig) throws ServletException {
         // TODO Auto-generated method stub
         this .filterConfig=filterConfig;
     }
  
}
自動登陸的過濾類,用來控制用戶的自動的登陸操做的相關
  
package filter;
  
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
  
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
  
import bean.Admin;
  
import service.AdminService;
import serviceImpl.AdminServiceImpl;
import sun.misc.BASE64Encoder;
  
public class AutoLoginFilter implements Filter {
  
     @Override
     public void destroy() {
         // TODO Auto-generated method stub
     }
  
     @Override
     public void doFilter(ServletRequest req, ServletResponse res,
             FilterChain chain) throws IOException, ServletException {
         // 強制造型爲子類型
         HttpServletRequest request = (HttpServletRequest) req;
         HttpServletResponse response = (HttpServletResponse) res;
         // 1.首先判斷session
         Object object = request.getSession().getAttribute( "admin" );
  
         if (object != null ) {
             request.getRequestDispatcher( "./sc.jsp" ).forward(request, response);
             return ;
         }
  
         // 2.判斷cookie中是否存在用戶的記錄
         Cookie autoCookie = null ;
         // 獲取全部的cookie進行遍歷判斷
         Cookie cookies[] = request.getCookies();
         if (cookies != null ) {
             for (Cookie cookie : cookies) {
                 // 判斷是否已經存貯用戶記錄
                 if ( "autoLogin" .equals(cookie.getName())) {
                     autoCookie = cookie;
                 }
             }
  
             // 判斷是否存在用戶自動登陸記錄
             if (autoCookie == null ) {
                 chain.doFilter(request, response);
                 return ;
             }
  
             // 3.判斷cookie的值
             // 獲取cookie值
             String value = autoCookie.getValue();
             // 拆分
             String temps[] = value.split( ":" );
  
             // 判斷長度是不是自定義的長度
             if (temps.length != 3 ) {
                 chain.doFilter(request, response);
                 return ;
             }
             // 獲取拆分後的數據
             String name = temps[ 0 ];
              
             String time = temps[ 1 ];
              
             String service_md5Value = temps[ 2 ];
  
             // 4.根據時間判斷是否失效
             if (Long.valueOf(time) <= System.currentTimeMillis()) {
                 chain.doFilter(request, response);
                 return ;
             }
  
             // 5.根據用戶名查詢數據
             AdminService adminService = new AdminServiceImpl();
             // 向數據庫發送數據請求
             Admin entity = adminService.checkLogin(name);
             if (entity == null ) {
                 chain.doFilter(request, response);
                 return ;
             }
  
             // 6.拼接字符串在進行二次判斷,
             String md5Temp = entity.getPass() + ":" + entity.getName() + ":"
                     + time + "donghongyujava" ;
             if (!(md5Value(md5Temp).equals(service_md5Value))) {
                 chain.doFilter(request, response);
                 return ;
             }
  
             // 7.若是以上的判斷都經過,那麼就發送成功的轉跳鏈接
             request.getSession().setAttribute( "admin" , entity);
             request.getRequestDispatcher( "./sc.jsp" ).forward(request, response);
         } else {
             chain.doFilter(request, response);
             return ;
         }
     }
  
     @Override
     public void init(FilterConfig arg0) throws ServletException {
         // TODO Auto-generated method stub
  
     }
  
     // 加密的操做函數
     public String md5Value(String value) {
         try {
             // 獲取md5加密的對象
             MessageDigest digest = MessageDigest.getInstance( "md5" );
             // 將傳入的數據裝換爲byte字節,在用digest進行轉換(加密)成新的字節數組,
             byte result[] = digest.digest(value.getBytes());
             BASE64Encoder encoder = new BASE64Encoder();
             // 返回加密後的數據
             return encoder.encode(result);
  
         } catch (NoSuchAlgorithmException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         }
         return "" ;
     };
  
}
web的配置,主要配置的是servlet和filter的配置
<?xml version= "1.0" encoding= "UTF-8" ?>
<?XML:NAMESPACE PREFIX = [ default ] http: //java.sun.com/xml/ns/javaee NS = "http://java.sun.com/xml/ns/javaee" /><web-app id=WebApp_ID xmlns="http://java.sun.com/xml/ns/javaee" version="3.0" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
     <display-name>jqueryeasyui</display-name>
     <servlet>
         <servlet-name>AdminServlet</servlet-name>
         <servlet- class >servlet.AdminServlet</servlet- class >
     </servlet>
  
     <servlet-mapping>
         <servlet-name>AdminServlet</servlet-name>
         <url-pattern>/AdminOPer. do </url-pattern>
     </servlet-mapping>
  
  
     <filter>
         <filter-name>AutoLoginFilter</filter-name>
         <filter- class >filter.AutoLoginFilter</filter- class >
     </filter>
  
     <filter-mapping>
         <filter-name>AutoLoginFilter</filter-name>
         <url-pattern>/AdminOPer. do </url-pattern>
     </filter-mapping>
  
  
     <filter>
         <filter-name>EncodingFilter</filter-name>
         <filter- class >filter.EncodingFilter</filter- class >
         <!-- 設置傳入的參數是UTF- 8 -->
         <init-param>
             <param-name>encoding</param-name>
             <param-value>UTF- 8 </param-value>
         </init-param>
     </filter>
  
     <!-- 設置全部的請求操做都進行這個過濾的操做 -->
     <filter-mapping>
         <filter-name>EncodingFilter</filter-name>
         <url-pattern>/*</url-pattern>
     </filter-mapping>
  
     <welcome-file-list>
         <welcome-file>index.html</welcome-file>
         <welcome-file>index.htm</welcome-file>
         <welcome-file>index.jsp</welcome-file>
         <welcome-file> default .html</welcome-file>
         <welcome-file> default .htm</welcome-file>
         <welcome-file> default .jsp</welcome-file>
     </welcome-file-list>
</web-app>
 
 

 

用來跳轉的jsp代碼
<%@ page language= "java" import = "java.util.*" pageEncoding= "UTF-8" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+ "://" +request.getServerName()+ ":" +request.getServerPort()+path+ "/" ;
%>
  
  
<HTML>
   <HEAD>
     <BASE href= "<%=basePath%>" >
      
      
      
     <META content=no-cache http-equiv=pragma>
     <META content=no-cache http-equiv=cache-control>
     <META content= 0 http-equiv=expires>    
     <META content=keyword1,keyword2,keyword3 http-equiv=keywords>
     <META content= "This is my page" http-equiv=description>
     <!--
     <link rel= "stylesheet" type= "text/css" href= "styles.css" >
     -->
  
    
    
    
    登陸操做

 

要登錄的表單界面
<%@ page language= "java" import = "java.util.*" pageEncoding= "UTF-8" %>
  
<% @include file= "/common/tag.jsp" %>
<% @include file= "/common/jquery.jsp" %>
  
  
  
<html>
<HEAD>
  
  
<META content=no-cache http-equiv=pragma>
<META content=no-cache http-equiv=cache-control>
<META content= 0 http-equiv=expires>
<META content=keyword1,keyword2,keyword3 http-equiv=keywords>
<META content= "This is my page" http-equiv=description>
<!--
     <link rel= "stylesheet" type= "text/css" href= "styles.css" >
     -->
  
  
  
     <DIV>
         <!-- 登陸錯誤時的提示操做 -->
         <B>${requestScope.msg}</B>
         <!-- ${pageContext.request.contextPath}表明當前項目路徑下的操做 -->
         <FORM method=post action=${pageContext.request.contextPath}/AdminOPer. do >
             <TABLE border= 1 ><TBODY><TR><TD>用戶名:</TD><TD><INPUT type=text name=name></TD></TR><TR><TD>密碼:</TD><TD><INPUT type=text name=pass></TD></TR><TR><TD align=right><INPUT value=mark type=checkbox name=mark></TD><TD>下次記住密碼</TD></TR><TR><TD colSpan= 2 ><INPUT value= 1 type=radio name=day>一天
                         <INPUT value= 3 type=radio name=day>三天 <INPUT value= 7 CHECKED type=radio name=day>一週</TD></TR><TR><TD colSpan= 2 align=middle><INPUT id=submit value=登陸 type=submit><INPUT id=reset value=重置 type=reset></TD></TR></TBODY></TABLE>
             <INPUT value=adminLogin type=hidden name=oper>
         </FORM>
     </DIV>

 

成功登陸後的界面jsp代碼
  
<%@ page language= "java" import = "java.util.*" pageEncoding= "UTF-8" %>
<%
     String path = request.getContextPath();
     String basePath = request.getScheme() + "://"
             + request.getServerName() + ":" + request.getServerPort()
             + path + "/" ;
%>
  
  
<HTML>
<HEAD>
<BASE href= "<%=basePath%>" >
  
  
  
<META content=no-cache http-equiv=pragma>
<META content=no-cache http-equiv=cache-control>
<META content= 0 http-equiv=expires>
<META content=keyword1,keyword2,keyword3 http-equiv=keywords>
<META content= "This is my page" http-equiv=description>
<!--
     <link rel= "stylesheet" type= "text/css" href= "styles.css" >
     -->
  
  
  
  
<!-- 從session域中取出已經存入的用戶對象 -->
     歡迎  <B>${sessionScope.admin.name}</B>進入
相關文章
相關標籤/搜索