java_web用户的自动登录模块的实现(三)

2014-11-24 07:20:23 · 作者: · 浏览: 4
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 cookieva lue = name + ":" + time + ":" + md5Value(pass + ":" + name + ":" + time + ":donghongyujava"); /* * Control character in cookie value or attribute. * 当存入的数据是中文时,cookie会出现乱码现象 需要进行编码的转换 */ autoCookie = new Cookie("autoLogin", URLEncoder.encode( cookieva lue, "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.I