jsp------实现MD5加密

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>&nbsp;&nbsp;号:</td>
                        <td><input type="text" name="account"></td>
                    </tr>
                    <tr>
                        <td>&nbsp;&nbsp;码:</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="登陆">&nbsp;
                            <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;
    }
}

 

posted @ 2016-06-03 21:18  玉天恒  阅读(12183)  评论(0编辑  收藏  举报