记住用户名的,选中复选框则记住用户名和密码,下次登录的时候就方便用户名的登陆
- 博客分类:
- 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();
}
}
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();
}
}
发表评论
-
Java身份证验证方法
2015-11-25 11:14 572Java身份证验证方法 package com.tg.user ... -
java 中文乱码问题
2015-06-30 22:19 419JAVA之编码---->CSV在文 ... -
java如何将错误的堆栈信息写入日志
2015-04-13 15:03 1182最近在写代码的时候,在写日志的时候用e.getMessage( ... -
JAVA中去掉空格
2015-03-27 09:42 520JAVA中去掉空格 1. String.trim ... -
gucie注入学习
2015-01-24 19:36 385http://www.blogjava.net/xylz/ar ... -
Spring的AOP配置
2015-01-21 22:35 354Spring的AOP配置 1.先写一个普通类: packa ... -
mybatis if 字符串比较注意
2014-12-22 14:39 804正确的写法: <if test='finished= ... -
maven搭建springmvc+spring+mybatis实例
2014-11-30 10:17 869maven管理的springmvc+spring+mybat ... -
log4j教程
2014-10-30 10:35 256log4j教程 1. 简介 2. 安装 3. log4j基本 ... -
通过Jersey客户端API调用REST风格的Web服务
2014-10-22 10:12 795通过Jersey客户端API调用REST风格的Web服务 J ... -
redis
2014-09-27 20:25 341java对redis的基本操作 一 ... -
pring + hibernate+ C3P0+MYSQL
2014-08-14 23:49 3421) applicationContext.xml --- ... -
Spring 事物
2014-07-05 06:34 299千山我独行,不必相送... Angi For Ever Spr ... -
Spring+Quartz实现定时任务的配置方法
2014-06-11 22:01 516Spring+Quartz实现定时任务的配置方法 1、Sch ... -
BigDecimal.setScale 处理java小数点位数 (BigDecimal、精度、位数)
2014-05-10 13:34 1461BigDecimal.setScale 处理java小数点位数 ... -
JAVA实现SFTP的实例:
2014-05-05 11:44 362最近写的一个JAVA实现SFTP的实例: /* * Crea ... -
Java模拟HTTP的Get和Post请求
2014-04-18 16:52 637import java.io.BufferedReader; ... -
Java发送http请求 (get 与 post方法请求)
2014-04-18 16:38 375java发送http请求 (get 与 post方法请求 ... -
Java 使用 URLConnection 模拟 Http Get和Post 提交
2014-04-18 16:27 6431、URLConnectionHelper ... -
HttpClient4使用
2014-03-24 16:11 351package main;import java.i ...
相关推荐
实现第二次登录记住用户名和密码,同时复选框被选中,实现跳转。
方法一:win +R :control userpasswords2 在弹出的"用户帐户"对话窗中去除"要使用本机,用户必须输入用户名和密码"前复选框中的选中标志.然后在自动登录中输入用户名和密码即可.方法二:开始--运行.输入: rundll32 ...
然后取消“用户下次登录时需更改密码”复选框,并勾选“用户不能更改密码”和“密码永不过期”复选框,单击“创建”按钮完成该用户的添加。重复这一过程添加用户admin,最后单击“关闭”按钮即可。
选中“隐藏”复选框,以使其生效。 在所有Twitch页面上,脚本将每100毫秒运行一次,以隐藏聊天记录中您记录的用户名中的所有消息。 如果您对用户名或复选框进行了任何更改,请刷新网页以使它们生效。
4、 点击复选框选择删除,若是未选择删除,会提示未选中,可批量删除 5、 点击增加、修改会分别进入增加、修改界面 6、 点击下一页,会进入下一页,在选框中输入页面,会跳转到相关页 7、 若是男性则改行为红色,...
101 4.10 把样式应用到选项和表格按钮 104 4.11 一步选择或取消所有的复选框 107 4.12 验证两个字段 110 4.13 验证密码和确认密码字段是否匹配 113 4.14 禁用某些字段 116 4.15 验证整个表单 118 4.16 表单数据序列...
· 如果使用用户名和密码登录,则填入用户名和密码(不要选择“集成Windows认证”复选框) · 如果使用Windows认证登录,则选中“集成Windows认证”复选框 · 完成上述步骤后,就可以从下拉框中选择数据库了(您也...
然 后取消"用户下次登录时需更改密码"复选框,并勾选"用户不能更改密码"和"密码永不过 期"复选框,单击"创建"按钮完成该用户的添加。重复这一过程添加其他用户,最后单击 "关闭"按钮即可。 为方便对这些用户的管理,...
1、软件的每个地方(复选框、文本框、按钮)都有说明文字,鼠标放到上面就会显示相应提示。 2、软件的右上角有个帮助按钮(?形式),点击可以查看一些常见问题的解决办法。建议查看。 3、如果你因为输入的用户名...
然 后取消"用户下次登录时需更改密码"复选框,并勾选"用户不能更改密码"和"密码永不过 期"复选框,单击"创建"按钮完成该用户的添加。重复这一过程添加其他用户,最后单击 "关闭"按钮即可。 为方便对这些用户的管理,...
选中【启用配额管 理】和【拒绝将磁盘空间给超过配额限制的用户】复选框,然后选中【将磁盘空间限制 为】单选钮,并按计划输入限制使用的空间大小(如100MB)和警告等级(如90M),如 图7-187所示。 这里根据自己的...
选中“开发人员模式”复选框 加载“解压”扩展名>选择此仓库的目录 激活扩展程序! 行为 可用时将自动用用户名替换用户ID。 一些用户没有包括他们的真实姓名。 在这种情况下,您将看到他们的ID。 限速 无需使用特殊...
屏幕零件上吧新用户按钮禁用的用户显示复选框保存用户按钮用户清单ID排序按钮用户名排序按钮电子邮件排序按钮用户状态排序按钮显示用户列表新用户信息屏幕用户名文本框显示名称文本框电话文字框电子邮件文字框用户...
要检查扩展程序的状态,请转到chrome:// extensions /并确保选中了“已启用”复选框。当您重新安装系统/ chrome或清理所有chrome数据目录文件时,请记住再次安装此扩展程序(如果您未启用chrome扩展程序同步)。 ...
要检查扩展程序的状态,请转到chrome:// extensions /并确保选中了“已启用”复选框。 重新安装系统/ chrome或清理所有chrome数据目录文件时,请记住再次安装此扩展程序(如果您未启用chrome扩展程序同步)。
当你编辑文章或者页面的屏幕的主编辑框下面会添加一个新的Wordpress Wiki复选框,你选中它后,那么就意味着任何人可以登陆到你的网站以一个WikiEditor维基编辑人的身份编辑这些特定的页面(测试时好像需要用户名和...
• 如果使用用户名和密码登录,则填入用户名和密码(不要选择“集成Windows认证”复选框) • 如果使用Windows认证登录,则选中“集成Windows认证”复选框 • 完成上述步骤后,就可以从下拉框中选择数据库了(您也...
创建一个名称和命名空间 URI = sid1.gg的新工作区,并选中复选框:启用、WFS 和 WMS ; 根据您的架构、用户名、密码等配置数据库连接...在工作区中创建一个新的Store PostGIS 数据库; 从那里,原型将查询属于这...
改成经典模式,则可以输入用户名和密码来登录你要进入的计算机。 5.正确配置网络防火墙 很多机器安装了网络防火墙,它的设置不当,同样导致用户无法访问本机的共享资源,这时就要开放本机共享资源所需的NetBIOS...
如果您希望获得该文件夹内容的所有权,请单击以选中“替换子容器及对象的所有者”复选框。 6. 单击“确定”。 您可能会收到以下错误信息,其中 Folder 是您想获得其所有权的文件夹的名称: You do not have ...