标签:
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <%@page import="java.net.*" %> <%@page import="comm.MakeMD5" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>MyIndex</title> <meta http-equiv="imurl" content="no-cache"> </head> <body> <% boolean loginFlag=false; String account=null; String md5Account=null; Cookie cookieArr[]=request.getCookies(); if(cookieArr!=null&&cookieArr.length>0){ for(Cookie cookie:cookieArr){ if(cookie.getName().equals("account")){ account=cookie.getValue(); account=URLDecoder.decode(account,"utf-8"); //System.out.print(account); } if(cookie.getName().equals("md5Account")){ md5Account=cookie.getValue(); md5Account=URLDecoder.decode(md5Account,"utf-8"); //System.out.print(md5Account); } } } if(account!=null&&md5Account!=null){ loginFlag=md5Account.equals(MakeMD5.getMD5(account)); } if(loginFlag){ //request.getRequestDispatcher("successlogin.jsp").forward(request, response); //response.sendRedirect("successlogin.jsp"); %> <fieldset> <legend>欢迎您回来</legend> <table align="center"> <tr> <td><%=account %>,欢迎您登陆本网站</td> <td align="center"> <a href="foreverlogin?action=logout">注销登陆</a> </td> </tr> </table> </fieldset> <% }else{ %> <fieldset> <legend>用户登录</legend> <form action="foreverlogin?action=login" method="post"> <table> <tr> <td>账 号:</td> <td><input type="text" name="account"></td> </tr> <tr> <td>密 码:</td> <td><input type="text" name="password"></td> </tr> <tr> <td>有效期:</td> <td> <input type="radio" name="timeout" value="-1" checked="checked"> 关闭浏览器即失效 <input type="radio" name="timeout" value="<%=30*24*60*60%>"> 30天内有效 <input type="radio" name="timeout" value="<%=Integer.MAX_VALUE%>"> 永久有效 </td> </tr> <tr> <td> <input type="submit" value="登陆"> <input type="reset" value="重置"> </td> </tr> </table> </form> </fieldset> <% } %> </body> </html>
src/comm/foreverlogin.java
package comm; import java.io.IOException; import java.net.URLEncoder; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class foreverlogin extends HttpServlet { private static final long serialVersionUID = 1L; public foreverlogin() { super(); } public void destroy() { super.destroy(); // Just puts "destroy" string in log // Put your code here } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); String action=request.getParameter("action"); if(action.equals("login")){ login(request,response); } else if(action.equals("logout")){ logout(request,response); } } //login public void login(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException{ String account=request.getParameter("account"); //String password=request.getParameter("password"); int timeout=Integer.parseInt(request.getParameter("timeout")); String md5Account=MakeMD5.getMD5(account); //采用MD5算法加密 account=URLEncoder.encode(account,"utf-8"); //账号为中文时需要转换Unicode才能保存在Cookie中 Cookie accountCookie=new Cookie("account",account); accountCookie.setMaxAge(timeout); Cookie md5AccountCookie=new Cookie("md5Account",md5Account); md5AccountCookie.setMaxAge(timeout); response.addCookie(accountCookie); response.addCookie(md5AccountCookie); //将线程休眠1秒后在执行 try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } //response.sendRedirect("cookie/resultlogin.jsp?"+System.currentTimeMillis()); response.sendRedirect("cookie/index.jsp?"+System.currentTimeMillis()); } //logout public void logout(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException{ Cookie accountCookie=new Cookie("account",""); accountCookie.setMaxAge(0); Cookie md5AccountCookie=new Cookie("md5Account",""); md5AccountCookie.setMaxAge(0); response.addCookie(accountCookie); response.addCookie(md5AccountCookie); //将线程休眠一秒后在执行 try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } response.sendRedirect("cookie/index.jsp?"+System.currentTimeMillis()); } public void init() throws ServletException { // Put your code here } }
src/comm/MakeMD5.java
package comm; import java.security.MessageDigest; public class MakeMD5 { public final static String getMD5(String str){ // 用来将字节转换成 16 进制表示的字符 char hexDiagiArr[]={‘0‘,‘1‘,‘2‘,‘3‘,‘4‘,‘5‘,‘6‘,‘7‘,‘8‘,‘9‘,‘0‘,‘a‘,‘b‘,‘c‘,‘d‘,‘e‘,‘f‘}; MessageDigest digest=null; try{ digest=MessageDigest.getInstance("MD5"); //创建MD5算法摘要 digest.update(str.getBytes()); //更新摘要 byte mdBytes[]=digest.digest(); //加密,并返回字节数组 //新建字符数组,长度为myBytes字节数组的2倍,用于保存加密后的值 char newCArr[]=new char[mdBytes.length*2]; int k=0; for(int i=0;i<mdBytes.length;i++){ byte byte0=mdBytes[i]; newCArr[k++]=hexDiagiArr[byte0>>>4&0x0f]; //取字节中高 4 位的数字转换,>>>为逻辑右移,将符号位一起右移 newCArr[k++]=hexDiagiArr[byte0&0x0f]; //取字节中低 4 位的数字转换 //针对字符0-9的,0-9的ascii码值为0x30,0x31,0x32 0x33 ...0x39, //因此与0x0f按位与后只保留个位上的书即0x0,0x1,。。。0x9 // 0000 1010 //& 0000 1111 // 0000 1010 } return String.valueOf(newCArr); //将转换后的字符转换为字符串 } catch(Exception e){ e.printStackTrace(); } return null; } }
标签:
原文地址:http://www.cnblogs.com/tianhengblogs/p/5557638.html