zoukankan      html  css  js  c++  java
  • 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;
        }
    }
  • 相关阅读:
    小涛涛的计算器
    Sort排序浅聊
    程序员PC选购
    冒泡排序
    Django之模板
    Django中model的Meta选项
    Django之路由系统
    Django之视图系统
    踏上Flask的不归路(二)
    踏上Flask的不归路(一)
  • 原文地址:https://www.cnblogs.com/tianhengblogs/p/5557638.html
Copyright © 2011-2022 走看看