一,首先是jsp页面中的一些j代码:
1)这段代码是为了在打开登录页面的时候读取cookie~
var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
//页面加载完就执行的方法
window.onload = function(){
// 读取cookie中是否有保存 '记住用户名' 选项
jQuery.post("isSaveUserNameAndPwd.htm",{},function(reply){
if(reply.status == "1"){
$("#username")[0].value = reply.loginName;
}
});
};
2)这段主要依据提交form之后的数据处理写。调用3)保存用户名到cookie中
function login(loginObject){
var isSaveUserNameAndPwd="";
loginObject.userName =fullEscape($("#username").val());
...
if($("#saveName2Cookie")[0].checked){//选中保存用户名
isSaveUserNameAndPwd = $("#saveName2Cookie")[0].value;
}
...
addCookies(loginObject.userName ,isSaveUserNameAndPwd);
...
}
function addCookies(loginName,saveCookie){
var name = base64encode(loginName);
var saveName2Cookie = base64encode(saveCookie);
jQuery.post("addPwdCookies.htm",{"loginName":name,"saveName2Cookie":saveName2Cookie},function(){});
}
//加密的方法
function base64encode(str) {
var out, i, len;
var c1, c2, c3;
len = str.length;
i = 0;
out = "";
while(i < len) {
c1 = str.charCodeAt(i++) & 0xff;
if(i == len)
{
out += base64EncodeChars.charAt(c1 >> 2);
out += base64EncodeChars.charAt((c1 & 0x3) << 4);
out += "==";
break;
}
c2 = str.charCodeAt(i++);
if(i == len)
{
out += base64EncodeChars.charAt(c1 >> 2);
out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));
out += base64EncodeChars.charAt((c2 & 0xF) << 2);
out += "=";
break;
}
c3 = str.charCodeAt(i++);
out += base64EncodeChars.charAt(c1 >> 2);
out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));
out += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >>6));
out += base64EncodeChars.charAt(c3 & 0x3F);
}
return out;
}
4)页面中的保存用户名的选项
记住用户名
二,接下来就是Action类中的一些方法了:
1)这个方法是上面jsp页面中的代码 1)中跳转的方法,判断是否包含有效的cookie。
public String isSaveUserNameAndPwd() {
JSONObject json = new JSONObject();
String flag = ServletUtils.getCookie(ActionContext.getRequest(), LoginAction.LOCAL_REMEMBER_USERNAME_PWD_KEY);
if (flag == null) {
json.put("status", "0");
inputStream = json.toString();
return SUCCESS;
}
else {
flag = reDeCode64(flag);
String name = "";
if (flag.equals("1" + BASE64_KEY)) {
name = ServletUtils.getCookie(ActionContext.getRequest(), LoginAction.LOCAL_REMEMBER_NAME);
if (!name.equals("")) {
name = reDeCode64(name).replaceAll(BASE64_KEY, "");
json.put("status", "1");
json.put("loginName", name);
inputStream = json.toString();
return SUCCESS;
}
}
}
return SUCCESS;
}
public String addPwdCookies() {
String flag = new String(Base64.decodeBase64(saveName2Cookie.getBytes())).trim();
if (flag.equals("1")) {
String realName = new String(Base64.decodeBase64(loginName.getBytes())).trim();
// 添加密码Cookie
ServletUtils.addCookie(ActionContext.getResponse(), LoginAction.LOCAL_REMEMBER_NAME, reEnCode64(realName),
7 * 24 * 60 * 60);
}
// 添加账号密码是否需要保存的Cookie
ServletUtils.addCookie(ActionContext.getResponse(), LoginAction.LOCAL_REMEMBER_USERNAME_PWD_KEY,
reEnCode64(flag), 7 * 24 * 60 * 60);
return SUCCESS;
}
private String reEnCode64(String str) {
String newStr = new String(Base64.encodeBase64((str + BASE64_KEY).getBytes())).trim();
return newStr;
}
private String reDeCode64(String str) {
String newStr = new String(Base64.decodeBase64((str).getBytes())).trim();
newStr.replaceAll(BASE64_KEY, "");
return newStr;
}