java_web用户的自动登录模块的实现
来源:互联网 发布:服务贸易数据包括哪些 编辑:程序博客网 时间:2024/05/16 15:01
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>原文地址:http://my.oschina.net/donghongyu/blog/190504
0 0
- java_web用户的自动登录模块的实现
- java_web用户的自动登录模块的实现
- java_web用户的自动登录模块的实现
- java_web用户的自动登录模块的实现
- java_web 记录用户自动登录用户密码 模块的实现
- javaweb用户的自动登录模块的实现
- 用户登录模块的实现过程
- 用户自动登录的jsp实现
- 对用户自动登录实现的代码
- python-简单的用户与密码登录模块实现
- 利用cookie实现用户自动登录的代码
- 实现用户自动登录
- 自动登录的实现
- 自动登录的实现
- 自动登录的实现
- 用户登录模块出现的问题
- 基于cookie的用户登录模块
- 用户登录后自动执行的文件
- CodeForces-492E Vanya and Field(思维题/最小公倍数)
- Linux下shell脚本符号和语法详解
- codeforces-55D-Beautiful numbers(数位DP)
- 周记<From 2016/8/17 to 2016/8/23>
- [noip2001pj] 装箱问题
- java_web用户的自动登录模块的实现
- Android中使用Handler造成内存泄露的分析和解决
- 【Qt开发】解决Qt5.7.0中文显示乱码的问题
- 读写文件相关操作
- 编程珠玑第二章习题2.6(1-4)
- 数据结构 线段树 HDU 1754I Hate It(单点更新)
- 新技能get
- 监听器实现网站计数并获取用户信息
- python 多线程与多进程的简单测试比较