Coolie记住用户名和密码

Action:

public String home() throws UnsupportedEncodingException{
//2011-12-30,添加验证码的校验功能 begin
boolean flag = LogonUtils.checkNumber(request);
if(!flag){
this.addFieldError("error", "验证码为空或者有误");
return "error";
}
//end
//获取当前登录名和密码
String name = elecMenuForm.getName();
String password = elecMenuForm.getPassword();
MD5keyBean md5 = new MD5keyBean();
String md5password = md5.getkeyBeanofStr(password);
//使用登录名查询数据库,获取用户的详细信息
ElecUser elecUser = elecUserService.findElecUserByLogonName(name);
if(elecUser==null){
this.addFieldError("error", "您当前输入的登录名不存在");
return "error";
}
if(password==null || password.equals("") || !elecUser.getLogonPwd().equals(md5password)){
this.addFieldError("error", "您当前输入的密码有误或不存在");
return "error";
}
request.getSession().setAttribute("globle_user", elecUser);
//获取当前登录名所具有的权限
String popedom = elecUserService.findElecPopedomByLogonName(name);
if(popedom==null || "".equals(popedom)){
this.addFieldError("error", "当前登录名没有分配权限,请与管理员联系");
return "error";
}
request.getSession().setAttribute("globle_popedom", popedom);
//获取当前登录名所具有的角色
Hashtable ht = elecUserService.findElecRoleByLogonName(name);
if(ht==null){
this.addFieldError("error", "当前登录名没有分配角色,请与管理员联系");
return "error";
}
request.getSession().setAttribute("globle_role", ht);
//2011-12-30添加,添加记住我的功能,记住当前操作的用户名和密码 begin
   LogonUtils.remeberMeByCookie(request,response);
//end

//2011-12-30,添加日志管理模块维护系统的性能安全 begin
//使用log4j
// java.sql.Date date = new java.sql.Date(new java.util.Date().getTime());
// String d = date.toString();
// log.info("用户名:【"+elecUser.getUserName()+"】登录系统!时间是:"+d);
//使用数据库
elecLogService.saveElecLog(request,"登录模块:当前用户【"+elecUser.getUserName()+"】登录系统");
//end
return "home";
}

方法:LogonUtils.remeberMeByCookie(request,response)

public static void remeberMeByCookie(HttpServletRequest request,
HttpServletResponse response) throws UnsupportedEncodingException {
//获取页面中的登录名和密码
String name = request.getParameter("name");
String password = request.getParameter("password");
//创建2个Cookie,分别用来存放登录名和密码
//处理Cookie中存在的中文字符
String codeName = URLEncoder.encode(name, "UTF-8");
Cookie nameCookie = new Cookie("name",codeName);
Cookie passwordCookie = new Cookie("password",password);
//设置Cookie的有效路径,有效路径定义为项目的根路径
//System.out.println("path="+request.getContextPath());
nameCookie.setPath(request.getContextPath()+"/");
passwordCookie.setPath(request.getContextPath()+"/");
/**
* 从页面中获取记住我的复选框的值,
*    * 如果有值,设置Cookie的有效时长
*    * 如果没有值,清空Cookie的有效时长
*
*/
String remeberMe = request.getParameter("remeberMe");
//设置Cookie的有效时长
if(remeberMe!=null && remeberMe.equals("yes")){
nameCookie.setMaxAge(7*24*60*60);
passwordCookie.setMaxAge(7*24*60*60);
}
//清空Cookie的有效时长
else{
nameCookie.setMaxAge(0);
passwordCookie.setMaxAge(0);
}
//将2个Cookie的对象存放到response对象
response.addCookie(nameCookie);
response.addCookie(passwordCookie);
}

jsp:


<%
String name = "";
String password = "";
String checked = "";
Cookie [] cookies = request.getCookies();
for(int i=0;cookies!=null && iCookie cookie = cookies[i];
if(cookie!=null && "name".equals(cookie.getName())){
name = URLDecoder.decode(cookie.getValue(),"UTF-8");
checked = "checked";
}
if(cookie!=null && "password".equals(cookie.getName())){
password = cookie.getValue();
}
}
%>



>



cookie用法小结 cookie.setPath

javax.servlet.http.Cookie有两个比较重要的方法:setDomain()、setPath()

正常的cookie只能在一个应用中共享,即一个cookie只能由创建它的应用获得。

1.可在同一应用服务器内共享方法:设置cookie.setPath("/"); 
本机tomcat/webapp下面有两个应用:webapp_a和webapp_b, 
1)原来在webapp_a下面设置的cookie,在webapp_b下面获取不到,path默认是产生cookie的应用的路径。

2)若在webapp_a下面设置cookie的时候,增加一条cookie.setPath("/");或者cookie.setPath("/webapp_b/");
就可以在webapp_b下面获取到cas设置的cookie了。

3)此处的参数,是相对于应用服务器存放应用的文件夹的根目录而言的(比如tomcat下面的webapp),因此cookie.setPath("/");之后,可以在webapp文件夹下的所有应用共享cookie,而cookie.setPath("/webapp_b/");
是指cas应用设置的cookie只能在webapp_b应用下的获得,即便是产生这个cookie的webapp_a应用也不可以。

4)设置cookie.setPath("/webapp_b/jsp")或者cookie.setPath("/webapp_b/jsp/")的时候,只有在webapp_b/jsp下面可以获得cookie,在webapp_b下面但是在jsp文件夹外的都不能获得cookie。

5)设置cookie.setPath("/webapp_b");,是指在webapp_b下面才可以使用cookie,这样就不可以在产生cookie的应用webapp_a下面获取cookie了

6)有多条cookie.setPath("XXX");语句的时候,起作用的以最后一条为准。

2.跨域共享cookie的方法:设置cookie.setDomain(");

A机所在的域:hom,A有应用webapp_a
B机所在的域:jszx.com,B有应用webapp_b 
1)在webapp_a下面设置cookie的时候,增加cookie.setDomain(");,这样在webapp_b下面就可以取到cookie。

2)输入url访问webapp_b的时候,必须输入域名才能解析。比如说在A机器输入:,可以获取webapp_a在客户端设置的cookie,而B机器访问本机的应用,输入:http://localhost:8080/webapp_b则不可以获得cookie。

3)设置了cookie.setDomain(");,还可以在默认的hom下面共享

你可能感兴趣的:(Coolie记住用户名和密码)