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, Integer> { 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<Admin> findAll() { // TODO Auto-generated method stub return null; } @Override public Admin findById(Integer id) { // TODO Auto-generated method stub return null; } @Override public List<Admin> 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, Integer> { 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<Admin> findAll() { return null; } @Override public Admin findById(Integer id) { return null; } @Override public List<Admin> 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"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <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+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <a href="${pageContext.request.contextPath}/AdminOPer.do?oper=login">登录操作</a> </body> </html>
要登陆的表单界面 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@include file="/common/tag.jsp"%> <%@include file="/common/jquery.jsp"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>My JSP 'index.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <div> <!-- 登录错误时的提示操作 --> <b>${requestScope.msg}</b> <!-- ${pageContext.request.contextPath}代表当前项目路径下的操作 --> <form action="${pageContext.request.contextPath}/AdminOPer.do" method="post"> <table border="1"> <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 type="checkBox" name="mark" value="mark"></td> <td>下次记住密码</td> </tr> <tr> <td colspan="2"><input type="radio" name="day" value="1">一天 <input type="radio" name="day" value="3">三天 <input type="radio" name="day" value="7" checked="checked">一周</td> </tr> <tr> <td align="center" colspan="2"><input type="submit" value="登录" id="submit"><input type="reset" value="重置" id="reset"></td> </tr> </table> <input type="hidden" value="adminLogin" name="oper"> </form> </div> </body> </html>
成功登录后的界面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 HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'sc.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <!-- 从session域中取出已经存入的用户对象 --> 欢迎 <b>${sessionScope.admin.name}</b>进入 </body> </html>