JAVAWEB使用 cookie实现“记住密码”功能

1、使用CookieEncryptTool.java类对创建的Cookie 信息进行加解密。

具体代码如下:

package com.shiyan03_3_23ORCL;

import java.io.UnsupportedEncodingException;

import org.apache.tomcat.util.codec.binary.Base64;

public class CookieEncryptTool {
	/*
	 * 
	 * 用Base64 加解密存在Cookie中的账号密码
	 * 按照RFC2045的定义,Base64 被定义为:Base64 内容传送编码被设计用来把任意序列的8位字节描述
	 * 为一种不易被人直接识别的形式
	 * 
	 * */
	public static String encodeBase64(String cleartext) {
		try {
			cleartext = new String(Base64.encodeBase64(cleartext.getBytes("UTF-8")));
			
		}catch(UnsupportedEncodingException e){
			e.printStackTrace();
		}
		return cleartext;
	}
	/*
	 * Base64解密
	 * */
	public static String decodeBase64(String ciphertext) {
		try {
			ciphertext = new String(Base64.decodeBase64(ciphertext.getBytes()),"UTF-8");
		}catch(UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return ciphertext;
	}
	
}

2、在login.jsp中 ,做以下更改:

使用jsp脚本实现对Cookie的读取以及给表单输入控件赋初始值的功能。

<%
	String applicantUsername = "";
	String applicantPassword = "";
	
	//从客户端获取Cookie
	Cookie[] cookies = request.getCookies();
	if(cookies != null){
		for(Cookie cookie : cookies){
			if("COOKIE_APPLICANTUSERNMAE".equals(cookie.getName())){
				applicantUsername = CookieEncryptTool.decodeBase64(cookie.getValue());
			}
			if("COOKIE_APPLICANTPASSWORD".equals(cookie.getName())){
				applicantPassword = CookieEncryptTool.decodeBase64(cookie.getValue());
			}
		}
	}
%>

在username 以及 password 的 input 中加入value 属性

账户:value="<%= applicantUsername%>">

密码:value="<%= applicantPassword%>">

另外设置“记住密码的复选框属性”

 checked="checked" name="rememberMe" id="rememberMe" value="true">记住密码

3、在LoginServlet.java 中,根据用户是否记住登录信息的选项向客户端添加和清除保存用户登录信息的Cookie

在登录验证中,如果用户登录成功,则交给rememberME 判断是否要存入Cookie。

rememberMe(rememberMe,username,password,request,response);

编写rememberMe函数

private void rememberMe(String rememberMe,String username,String password,
				HttpServletRequest request,HttpServletResponse response) {
	if("true".equals(rememberMe)) { //判断是否要通过cookie 记住账号及密码
		Cookie cookie = new Cookie("COOKIE_APPLICANTUSERNMAE",CookieEncryptTool.encodeBase64(username));
		cookie.setPath("/");
		cookie.setMaxAge(365*24*3600);
		response.addCookie(cookie);
		cookie = new Cookie("COOKIE_APPLICANTPASSWORD",CookieEncryptTool.encodeBase64(password));
		cookie.setPath("/");
		cookie.setMaxAge(365*24*3600);
		response.addCookie(cookie);
	}else {  //将账号及密码清除
		Cookie[] cookies = request.getCookies();
		if(cookies != null) {
			for(Cookie cookie : cookies) {
				if("COOKIE_APPLICANTUSERNMAE".equals(cookie.getName())||"COOKIE_APPLICANTPASSWORD".equals(cookie.getName())) {
					cookie.setMaxAge(0);
					cookie.setPath("/");
					response.addCookie(cookie);
							
				}
			}
		}
	}
}

你可能感兴趣的:(javaweb,cookie)