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

标签: 用户名 复选框 用户名 | 发表时间:2015-01-17 21:51 | 作者:liu_jiaqiang
出处:http://www.iteye.com
记住用户名的,选中复选框则记住用户名和密码,下次登录的时候就方便用户名的登陆:
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();
              }
}

已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [用户名 复选框 用户名] 推荐:

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

- - 编程语言 - ITeye博客
记住用户名的,选中复选框则记住用户名和密码,下次登录的时候就方便用户名的登陆:.        //保存cookie时的cookieName.        //加密cookie时的网站自定码.        //设置cookie有效期是两个星期,根据需要自定义.        //保存Cookie到客户端-------------------------------------------------------------------------.

weblogic忘记用户名或者密码的解决方法

- - 研发管理 - ITeye博客
weblogic安装后,忘记访问控制台的用户名或者密码,可通过以下步骤来重置用户名密码. 版本:WebLogic Server 10.3. 说明:%DOMAIN_HOME%:指WebLogic Server 域(Domain)目录. 例如我的做测试的域的根目录 DOMAIN_HOME=D:/Weblogic/Middleware/user_projects/domains/base_domain.

JWT认证,取得过期token的用户名

- - 掘金后端
项目前后端分离,请求认证使用的是JWT无状态认证. 最近遇到一个问题,认证token需要从token中获取用户名,但是这个token有可能是过期的. 一般取得用户名用的是下面的代码. .getBody(); } 复制代码. 如果token没有过期,则可以通过Claims.getSubject()获得用户名.

LNMP下为Nginx目录设置访问验证的用户名密码

- blacktulip - VPS侦探
有时候需要象Apache那样为指定的目录添加访问验证,一般在Apache下使用htpasswd来添加,而htpasswd是包含在apache2-utils里,一般LNMP一键安装包或自己编译安装LNMP都不会安装apache2-utils. 下面VPS侦探说一下如何为Nginx的网站目录设置访问验证:.

Ajax用户名验证、服务条款加载、验证码生成

- - 博客园_首页
 Ajax(asynchronous javascript and xml)异步的javascript和xml..     是为了解决传统的web应用中"发送请求-等待响应"这种模式的弊端,(浏览器在发送完请求后,只能等待服务器的响应,用户不能做其他的操作,浏览器发送完请求,会抛弃整个页面,等待服务器返回新的页面,也就是说,浏览器和服务器之间交互的数据量很大,不能做到按需获取数据)而创建的技术,该技术的本质是:通过一个浏览器内置的一个对象(XmlHttpRequest)异步地向服务器发送请求..

配置HiveServer2的安全策略之自定义用户名密码验证

- - 互联网 - ITeye博客
一共提供了三种安全认证方式,我们通常采用的为第三种自定义的方式. 从这段话看出来我们要实现一个接口:PasswdAuthenticationProvider (org.apache.hive.service.auth.PasswdAuthenticationProvider)我们来看看这个接口. 有一个方法要实现,实现了这个接口就可以自定义验证用户名密码了.

英律师建议人们在遗嘱中留下网络用户名和密码

- 舞愿~cc - cnBeta.COM
据澳大利亚《每日电讯报》10月14日报道,英国一家顶级律师事务所日前建议,在这个互联网盛行的年代,人们去世前应该在遗嘱中留下网络用户名和密码,以便更容易地完成他们的意愿. 英国欧文・米切尔律师事务所认为,人们的电子邮件、网络银行以及社交网站等详细资料,应该被列入正式法律文件中.

根据复选框后面的描述文字进行选择的技巧

- - CSDN博客Web前端推荐文章
最近做的一个页面,含有很多复选框. 但是现在的效果只能用鼠标去点击小小的复选框进行反选. 用户体验很不好,于是想到如果点击复选框后面的文字也可以进行反选,对用户来讲肯定要方便很多. 实现很简单,分享下我的代码. 页面: (勾选后启用) $(function() {.