关于登录中的记住我的功能(cookie实例)

来源:互联网 发布:重大误解知乎 编辑:程序博客网 时间:2024/05/17 23:49
 最近做了一个登录功能并可选了“记住我” 的功能,类似QQ登录的那种


思路很如下:鄙人不才,加上懒得打字就把代码放出来吧,慢慢读就会明白了
package com.sys.action;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import org.springframework.stereotype.Controller;
import com.opensymphony.xwork2.ActionContext;
import com.sys.api.ShipApi;
import com.sys.base.QueryResult;
import com.sys.bean.Employees;
import com.sys.util.APIFactory;
import com.sys.util.MD5;
import com.sys.util.MailSender;
import com.sys.util.PageBean;
import com.sys.util.SmsSender;
import com.sys.util.WebUtil;
 
/**
 * 登录类 
 */
@Controller("loginAction")
public class LoginAction  {
 /**
  * 初始化登录
  * 
  * 读取cookie
  * @return tologin
  */
 public String login() {
  try{
      String remebermestr= WebUtil.getInstance().getCookieByName(ServletActionContext.getRequest(), "username");
    if(remebermestr!=null &&!"".equals(remebermestr.trim())){
     String [] username = remebermestr.split("_");
     if(username!=null&&username.length>0){
        ServletActionContext.getRequest().setAttribute("username",username[0]);
        ServletActionContext.getRequest().setAttribute("password",username[1]);
        ServletActionContext.getRequest().setAttribute("checkboxcheck","1");
     }
    }
    String errorpass = ServletActionContext.getRequest().getParameter("stu");
    if(errorpass!=null && !"".equals(errorpass.trim())){
      ServletActionContext.getRequest().setAttribute("errorpass", "验证码错误");
    }
  
 
  } catch (Exception e) {
   e.printStackTrace();
  }
  return "tologin";
 }
 /**
  * 初始化忘记密码页面
  * 
  * 
  * @return findpwd
  */
 public String getPwd() {
  return "findpwd";
 }
 
 
 /**
  * 登录,此处密码没有加MD5测试完再加
  * 保存登录信息到session
  * 保存到cookie
  * @return getList
  */
 public String tologin() {
  try{
   
   ShipApi api =  APIFactory.getShipAPIFactory().getShipServiceAPI();
    HttpServletResponse response=ServletActionContext.getResponse();
   String msgbox =null;
  //从请求中获取查询条件
   String remebermestr= WebUtil.getInstance().getCookieByName(ServletActionContext.getRequest(), "username");
     String userName = ServletActionContext.getRequest().getParameter("username");//用户名
     String password = ServletActionContext.getRequest().getParameter("password");//密码
     String rememberme = ServletActionContext.getRequest().getParameter("rememberme");//记住我
     if(userName==null||userName.equals("")){
      msgbox = "用户名不能为空!";
     }else if(password==null||password.equals("")){
      msgbox = "密码不能为空!";  
     }
     if(msgbox!=null&&!msgbox.equals("")){
      ServletActionContext.getRequest().setAttribute("msgBox",msgbox);
      return "toredirect";  
     }
     //拼接查询SQL
     StringBuffer jhql = new StringBuffer(" ");
     List<Object> params = new ArrayList<Object>();
     if(rememberme!=null&&rememberme.equals("1")){//用户提交过来的是记住我
      /**获取COOKIE里面的值,比较提交过来的是否与COOKIE里一样**/
      if(remebermestr!=null){
    String [] remebermelist = remebermestr.split("_");
      if(remebermelist!=null&&remebermelist.length>0
        &&userName!=null&&userName.trim().equals(remebermelist[0])
        &&password!=null&&password.equals(remebermelist[1]) 
      ){
       /**COOKIE里有值与当前提交过来的一样**/
       if(userName.trim()!=null&&!userName.trim().equals("")&&password!=null&&!"".equals(password)){//用户名验证
        jhql.append("(");
        jhql.append(" o.userName=? ");
        params.add(userName.trim());
        jhql.append(" or  o.email=? ");
        params.add(userName.trim());
        jhql.append(" or  o.phone=? ");
        params.add(userName.trim());
        jhql.append(")");
        jhql.append(" and  o.password=? and o.visible=true");
        params.add(password);
       }
       PageBean pageBean = WebUtil.getInstance().getPageBean(ServletActionContext.getRequest());
       QueryResult<Employees> result = api.getScrollDataEmployees2(pageBean.getFirstPage(), pageBean.getMaxPage(),jhql.toString(),params.toArray());
      List<Employees> list = result.getResultlist();
      if(list!=null&&list.size()>0){
       Employees bean = list.get(0);
       ActionContext.getContext().getSession().put("user", bean);
        ServletActionContext.getResponse().sendRedirect("/nbshipWeb/other/iframeControll_main.action");
       return null;
      }else{
       msgbox = "不存在用户名或密码!";
       ServletActionContext.getRequest().setAttribute("msgBox",msgbox);
       ServletActionContext.getRequest().setAttribute("username",userName.trim());
        ServletActionContext.getRequest().setAttribute("password",MD5.getInstance().MD5Encode(password));
        ServletActionContext.getRequest().setAttribute("checkboxcheck","1");
       return "tologin"; 
      }
      }
      }
     
      }
     
     if(userName.trim()!=null&&!userName.trim().equals("")&&password!=null&&!"".equals(password.trim())){//用户名验证
      jhql.append("(");
      jhql.append(" o.userName=? ");
      params.add(userName.trim());
      jhql.append(" or  o.email=? ");
      params.add(userName.trim());
      jhql.append(" or  o.phone=? ");
      params.add(userName.trim());
      jhql.append(")");
      jhql.append(" and  o.password=? and o.visible=true");
      if(remebermestr!=null){
     String [] remebermelist = remebermestr.split("_");
       if(remebermelist!=null&&remebermelist.length>0
         &&userName!=null&&userName.trim().equals(remebermelist[0])
         &&password!=null&&password.equals(remebermelist[1]) 
       ){
        params.add(password.trim());
       
       }else{
        password=MD5.getInstance().MD5Encode(password.trim());
        params.add(password.trim());
       }
      }else{
       password=MD5.getInstance().MD5Encode(password.trim());
       params.add(password.trim());
      }
     
     }
//    
     PageBean pageBean = WebUtil.getInstance().getPageBean(ServletActionContext.getRequest());
     QueryResult<Employees> result = api.getScrollDataEmployees2(pageBean.getFirstPage(), pageBean.getMaxPage(),jhql.toString(),params.toArray());
    List<Employees> list = result.getResultlist();
    if(list!=null&&list.size()==1){
     Employees bean = list.get(0);
     ActionContext.getContext().getSession().put("user", bean);
     msgbox = "登录成功!";
     //添加COOKIES
     if(rememberme!=null&&rememberme.equals("1")){
     
       String namepwd = userName+"_"+password;
      WebUtil.getInstance().addCookie(response, "username",namepwd, 7*24*60*60);
     }else{
      //清除COOKIES
      WebUtil.getInstance().addCookie(response, "username",null,0);
     }
     ServletActionContext.getRequest().setAttribute("msgBox",msgbox);
     ServletActionContext.getResponse().sendRedirect("/nbshipWeb/other/iframeControll_main.action");
     return null;
    }else  if(list!=null&&list.size()>1){
     msgbox = "存在多个相同的帐号";
     return "tologin";
    }else{
     msgbox = "不存在用户名或密码!";
     ServletActionContext.getRequest().setAttribute("msgBox",msgbox);
     ServletActionContext.getRequest().setAttribute("username",userName.trim());
      ServletActionContext.getRequest().setAttribute("password",password.trim());
      ServletActionContext.getRequest().setAttribute("checkboxcheck","1");
     return "tologin"; 
    }
     //这里是把查询结果放在request中了,引用名为result,分页标签中的为pageSize
  
  } catch (Exception e) {
   e.printStackTrace();
  }
  
  return null;
 }
 
 /**
  * 初始获取验证
  * 
  * 发送邮箱  或短信
  * @return tologin
  */
 public String getSendMsg() {
  PrintWriter out = null;
  try {
    HttpServletRequest request=ServletActionContext.getRequest();
    HttpServletResponse response=ServletActionContext.getResponse();
    String emldun = ServletActionContext.getRequest().getParameter("emldun");
    String radiofind = ServletActionContext.getRequest().getParameter("radiofind");
    ShipApi api = (ShipApi) APIFactory.getShipAPIFactory().getShipServiceAPI();
    if(radiofind!=null&&radiofind.equals("1")){//短信用户
      //拼接查询SQL
      StringBuffer jhql = new StringBuffer(" ");
      List<Object> params = new ArrayList<Object>();
      if(emldun.trim()!=null&&!emldun.trim().equals("")){//用户名验证
       jhql.append("  o.phone=? ");
       params.add(emldun.trim());
      }
      PageBean pageBean = WebUtil.getInstance().getPageBean(ServletActionContext.getRequest());
      QueryResult<Employees> result = api.getScrollDataEmployees2(pageBean.getFirstPage(), pageBean.getMaxPage(),jhql.toString(),params.toArray());
      List<Employees> list = result.getResultlist();
      if(list!=null&&list.size()>0){//判断手机号是否存在
       SmsSender.getInstance().SendSms(emldun.trim(), "测试发送手机");
       out = response.getWriter();// 设置输出    
        out.print("phoneok");//out.print(value);    
        out.close(); 
      }else{
       out = response.getWriter();// 设置输出    
        out.print("phoneno");//out.print(value);    
        out.close(); 
      }
    }
    if(radiofind!=null&&radiofind.equals("2")){//邮箱用户
      //拼接查询SQL
      StringBuffer jhql = new StringBuffer(" ");
      List<Object> params = new ArrayList<Object>();
      if(emldun.trim()!=null&&!emldun.trim().equals("")){//用户名验证
       jhql.append("  o.email=? ");
       params.add(emldun.trim());
      }
      PageBean pageBean = WebUtil.getInstance().getPageBean(ServletActionContext.getRequest());
      QueryResult<Employees> result = api.getScrollDataEmployees2(pageBean.getFirstPage(), pageBean.getMaxPage(),jhql.toString(),params.toArray());
      List<Employees> list = result.getResultlist();
      if(list!=null&&list.size()>0){//判断邮箱是否存在
       MailSender.getInstance().sendMessage(emldun.trim(), "测试发送邮箱");
       out = response.getWriter();// 设置输出    
        out.print("emailok");//out.print(value);    
        out.close(); 
      }else{
       out = response.getWriter();// 设置输出    
        out.print("emailno");//out.print(value);    
        out.close(); 
      }
    }
  } catch (Exception e) {
    
   e.printStackTrace();
  } finally {
   if (out != null) {
    out.flush();
    out.close();
   }
   //ServiceAPIFactory.getInstance().destory();
  }
  return null;
 }
 
}