`
liu_jiaqiang
  • 浏览: 19156 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

记住用户名的,选中复选框则记住用户名和密码,下次登录的时候就方便用户名的登陆

    博客分类:
  • java
阅读更多
记住用户名的,选中复选框则记住用户名和密码,下次登录的时候就方便用户名的登陆:
package com.laizhi.util;

import java.io.IOException;

import java.io.PrintWriter;

import java.io.UnsupportedEncodingException;

import javax.servlet.FilterChain;

import javax.servlet.ServletException;

import javax.servlet.http.Cookie;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

import java.security.MessageDigest;

import java.security.NoSuchAlgorithmException;

import com.laizhi.bean.User;

import com.laizhi.dao.UserDAO;

import com.laizhi.factory.DaoImplFactory;

import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;

/*

* 2014.07.01

* */

public class CookieUtil {
       //保存cookie时的cookieName
       private final static String cookieDomainName = “laizhi”;
       //加密cookie时的网站自定码

       private final static String webKey = “123456”;
       //设置cookie有效期是两个星期,根据需要自定义
       private final static long cookieMaxAge = 60 * 60 * 24 * 7 * 2;
       //保存Cookie到客户端-------------------------------------------------------------------------
       //在CheckLogonServlet.java中被调用
       //传递进来的user对象中封装了在登陆时填写的用户名与密码

       public static void saveCookie(User user, HttpServletResponse response) {
              //cookie的有效期
              long validTime = System.currentTimeMillis() + (cookieMaxAge * 5000);
              //MD5加密用户详细信息
              String cookieValueWithMd5 =getMD5(user.getUserName() + ":" + user.getPassword()

                            + ":" + validTime + ":" + webKey);
              //将要被保存的完整的Cookie值
              String cookieValue = user.getUserName() + ":" + validTime + ":" + cookieValueWithMd5;
              //再一次对Cookie的值进行BASE64编码

              String cookieValueBase64 = new String(Base64.encode(cookieValue.getBytes()));
              //开始保存Cookie
              Cookie cookie = new Cookie(cookieDomainName, cookieValueBase64);
              //存两年(这个值应该大于或等于validTime)
              cookie.setMaxAge(60 * 60 * 24 * 365 * 2);

              //cookie有效路径是网站根目录

              cookie.setPath("/");

              //向客户端写入

              response.addCookie(cookie);

       }

      

       //读取Cookie,自动完成登陆操作----------------------------------------------------------------

       //在Filter程序中调用该方法,见AutoLogonFilter.java

       public static void readCookieAndLogon(HttpServletRequest request, HttpServletResponse response,

FilterChain chain) throws IOException, ServletException,UnsupportedEncodingException{
       //根据cookieName取cookieValue
       Cookie cookies[] = request.getCookies();
                     String cookieValue = null;
                     if(cookies!=null){
                            for(int i=0;i
                                   if (cookieDomainName.equals(cookies[i].getName())) {
                                          cookieValue = cookies[i].getValue();
                                          break;
                                   }

                            }

                     }
                     //如果cookieValue为空,返回,
                     if(cookieValue==null){
                            return;
                     }
              //如果cookieValue不为空,才执行下面的代码
              //先得到的CookieValue进行Base64解码
              String cookieValueAfterDecode = new String (Base64.decode(cookieValue),"utf-8");
              //对解码后的值进行分拆,得到一个数组,如果数组长度不为3,就是非法登陆
              String cookieValues[] = cookieValueAfterDecode.split(":");
              if(cookieValues.length!=3){
                     response.setContentType("text/html;charset=utf-8");
                     PrintWriter out = response.getWriter();
                     out.println("你正在用非正常方式进入本站...");
                     out.close();
                     return;
              }
              //判断是否在有效期内,过期就删除Cookie
              long validTimeInCookie = new Long(cookieValues[1]);
              if(validTimeInCookie < System.currentTimeMillis()){
                     //删除Cookie
                     clearCookie(response);
                     response.setContentType("text/html;charset=utf-8");
                     PrintWriter out = response.getWriter();
                     out.println("");你的Cookie已经失效,请重新登陆
                     out.close();
                     return;
              }
              //取出cookie中的用户名,并到数据库中检查这个用户名,
              String username = cookieValues[0];
             
              //根据用户名到数据库中检查用户是否存在
              UserDAO ud = DaoImplFactory.getInstance();
              User user = ud.selectUserByUsername(username);

              //如果user返回不为空,就取出密码,使用用户名+密码+有效时间+ webSiteKey进行MD5加密
              if(user!=null){
                     String md5ValueInCookie = cookieValues[2];
                     String md5ValueFromUser =getMD5(user.getUserName() + ":" + user.getPassword()
                                   + ":" + validTimeInCookie + ":" + webKey);
                     //将结果与Cookie中的MD5码相比较,如果相同,写入Session,自动登陆成功,并继续用户请求
                     if(md5ValueFromUser.equals(md5ValueInCookie)){
                            HttpSession session = request.getSession(true);
                            session.setAttribute("user", user);
                            chain.doFilter(request, response);
                     }

              }else{

              //返回为空执行
                     response.setContentType("text/html;charset=utf-8");
                     PrintWriter out = response.getWriter();
                     out.println("cookie验证错误!");
                     out.close();
               return;

             }

       }

      

       //用户注销时,清除Cookie,在需要时可随时调用-----------------------------------------------------
       public static void clearCookie( HttpServletResponse response){
              Cookie cookie = new Cookie(cookieDomainName, null);
              cookie.setMaxAge(0);
              cookie.setPath("/");
              response.addCookie(cookie);
       }

//获取Cookie组合字符串的MD5码的字符串----------------------------------------------------------------
              public static String getMD5(String value) {
                     String result = null;
                     try{
                            byte[] valueByte = value.getBytes();
                            MessageDigest md = MessageDigest.getInstance("MD5");
                            md.update(valueByte);
                            result = toHex(md.digest());
                     } catch (NoSuchAlgorithmException e2){
                            e1.printStackTrace();
                     }
                     return result;
              }
      //将传递进来的字节数组转换成十六进制的字符串形式并返回
              private static String toHex(byte[] buffer){
                     StringBuffer sb = new StringBuffer(buffer.length * 2);
                     for (int i = 0; i < buffer.length; i++){
                            sb.append(Character.forDigit((buffer[i] & 0xf0) >> 4, 16));
                            sb.append(Character.forDigit(buffer[i] & 0x0f, 16));
                     }
                     return sb.toString();
              }
}
分享到:
评论

相关推荐

    登录页面记住用户名密码

    实现第二次登录记住用户名和密码,同时复选框被选中,实现跳转。

    win7 开机自动选择账户登录

    方法一:win +R :control userpasswords2 在弹出的"用户帐户"对话窗中去除"要使用本机,用户必须输入用户名和密码"前复选框中的选中标志.然后在自动登录中输入用户名和密码即可.方法二:开始--运行.输入: rundll32 ...

    如何使用win7下iis配置伪静态

    然后取消“用户下次登录时需更改密码”复选框,并勾选“用户不能更改密码”和“密码永不过期”复选框,单击“创建”按钮完成该用户的添加。重复这一过程添加用户admin,最后单击“关闭”按钮即可。

    Hide Twitch Chat Users-crx插件

    选中“隐藏”复选框,以使其生效。 在所有Twitch页面上,脚本将每100毫秒运行一次,以隐藏聊天记录中您记录的用户名中的所有消息。 如果您对用户名或复选框进行了任何更改,请刷新网页以使它们生效。

    javaweb员工信息管理系统源码+sql加强版

    4、 点击复选框选择删除,若是未选择删除,会提示未选中,可批量删除 5、 点击增加、修改会分别进入增加、修改界面 6、 点击下一页,会进入下一页,在选框中输入页面,会跳转到相关页 7、 若是男性则改行为红色,...

    jQuery攻略.pdf

    101 4.10 把样式应用到选项和表格按钮 104 4.11 一步选择或取消所有的复选框 107 4.12 验证两个字段 110 4.13 验证密码和确认密码字段是否匹配 113 4.14 禁用某些字段 116 4.15 验证整个表单 118 4.16 表单数据序列...

    sql server 数据库脚本导出工具

    · 如果使用用户名和密码登录,则填入用户名和密码(不要选择“集成Windows认证”复选框) · 如果使用Windows认证登录,则选中“集成Windows认证”复选框 · 完成上述步骤后,就可以从下拉框中选择数据库了(您也...

    FTP服务器的权限设置(1).doc

    然 后取消"用户下次登录时需更改密码"复选框,并勾选"用户不能更改密码"和"密码永不过 期"复选框,单击"创建"按钮完成该用户的添加。重复这一过程添加其他用户,最后单击 "关闭"按钮即可。 为方便对这些用户的管理,...

    协同拨号器替换软件 (此为老版,勿下)

    1、软件的每个地方(复选框、文本框、按钮)都有说明文字,鼠标放到上面就会显示相应提示。 2、软件的右上角有个帮助按钮(?形式),点击可以查看一些常见问题的解决办法。建议查看。 3、如果你因为输入的用户名...

    FTP服务器的权限设置.doc

    然 后取消"用户下次登录时需更改密码"复选框,并勾选"用户不能更改密码"和"密码永不过 期"复选框,单击"创建"按钮完成该用户的添加。重复这一过程添加其他用户,最后单击 "关闭"按钮即可。 为方便对这些用户的管理,...

    电子邮件服务器的配置.doc

    选中【启用配额管 理】和【拒绝将磁盘空间给超过配额限制的用户】复选框,然后选中【将磁盘空间限制 为】单选钮,并按计划输入限制使用的空间大小(如100MB)和警告等级(如90M),如 图7-187所示。 这里根据自己的...

    GitNames:Chrome扩展程序显示用户名而不是github ID

    选中“开发人员模式”复选框 加载“解压”扩展名&gt;选择此仓库的目录 激活扩展程序! 行为 可用时将自动用用户名替换用户ID。 一些用户没有包括他们的真实姓名。 在这种情况下,您将看到他们的ID。 限速 无需使用特殊...

    PI-Works-应用程序

    屏幕零件上吧新用户按钮禁用的用户显示复选框保存用户按钮用户清单ID排序按钮用户名排序按钮电子邮件排序按钮用户状态排序按钮显示用户列表新用户信息屏幕用户名文本框显示名称文本框电话文字框电子邮件文字框用户...

    始终自动完成「Always Autocomplete」-crx插件

    要检查扩展程序的状态,请转到chrome:// extensions /并确保选中了“已启用”复选框。当您重新安装系统/ chrome或清理所有chrome数据目录文件时,请记住再次安装此扩展程序(如果您未启用chrome扩展程序同步)。 ...

    Always Autocomplete-crx插件

    要检查扩展程序的状态,请转到chrome:// extensions /并确保选中了“已启用”复选框。 重新安装系统/ chrome或清理所有chrome数据目录文件时,请记住再次安装此扩展程序(如果您未启用chrome扩展程序同步)。

    WordPress 维基功能插件WP WIKI

    当你编辑文章或者页面的屏幕的主编辑框下面会添加一个新的Wordpress Wiki复选框,你选中它后,那么就意味着任何人可以登陆到你的网站以一个WikiEditor维基编辑人的身份编辑这些特定的页面(测试时好像需要用户名和...

    数据库迁移工具 SQLUtility

    • 如果使用用户名和密码登录,则填入用户名和密码(不要选择“集成Windows认证”复选框) • 如果使用Windows认证登录,则选中“集成Windows认证”复选框 • 完成上述步骤后,就可以从下拉框中选择数据库了(您也...

    prototipowfs:使用 WFS 服务模式的迭代功能原型存储库

    创建一个名称和命名空间 URI = sid1.gg的新工作区,并选中复选框:启用、WFS 和 WMS ; 根据您的架构、用户名、密码等配置数据库连接...在工作区中创建一个新的Store PostGIS 数据库; 从那里,原型将查询属于这...

    您可能没有权限使用网络资源。请与这台服务器的管理员联系以查明您是否有访问权限。拒绝访问解决方法

    改成经典模式,则可以输入用户名和密码来登录你要进入的计算机。 5.正确配置网络防火墙 很多机器安装了网络防火墙,它的设置不当,同样导致用户无法访问本机的共享资源,这时就要开放本机共享资源所需的NetBIOS...

    解决文件夹“无法访问、拒绝访问”的方法

    如果您希望获得该文件夹内容的所有权,请单击以选中“替换子容器及对象的所有者”复选框。 6. 单击“确定”。 您可能会收到以下错误信息,其中 Folder 是您想获得其所有权的文件夹的名称: You do not have ...

Global site tag (gtag.js) - Google Analytics