平时大家上网登录的时候都会有在“这台电脑上记住我”这个功能,
如果第一次登录了以后选择了记住我下次访问任何一个页面都会直接登录了。
现在我功能上是实现了,但只是打开首页的时候用脚本把cookie读取出来登录。
我要怎么做到每一个请求都能实现登录呢,总不能在每一个页面上都用脚本加载吧。我的方案是:比如我请求了index.do,用struts拦截器拦截一下这个方法先去读取cookie登录,
如果是请求index1.do我还得写一个拦截器去请求。能不能就写一个拦截或者是过滤器拦截所有的*.do请求呢?有做过的朋友能提供以下思路吗,谢谢大家。

解决方案 »

  1.   

    感觉可以用onload函数,加载的时候直接把Cookie里面的数据读入内存。然后在后台直接读取内存中的用户数据,看是否接收到用户数据。如果收到直接转跳,不用点登录按钮。
      

  2.   

    既然你说到了.do,那么自然是struts了,不过struts有个非常流行的做法,LZ怎么会不知道?常规做法:做一个抽象类BaseAction让它继承Action,覆盖Action的execute方法,然后声明一个抽象的doProcess方法。
    其他Action类都继承并实现BaseAction,就可以达到了。
    框架如下:public  abstract class BaseAction extends Action{ 
        /* 覆盖Action的execute方法 **/
        public ActionForward execute(.....//4个参数)throws Exception{     boolean logged = .....//在这里做你的登陆验证,一般都是判断session中是否有用户信息。
          if(logged){
              return doProcess(...//4个参数);
         }else{//没登陆,forward到登陆界面
             return new ActionForward("...")//导航到登陆界面
         }    
        }
    }/* 抽象方法,子类必须实现。子类可以在这里做你的业务 */
    public abstract ActionForward doProcess(...);//public class MyAction extends BaseAction{
         public abstract ActionForward doProcess(...){
             //你的业务代码
         }
    }
      

  3.   

    public class MyAction extends BaseAction{
         public abstract ActionForward doProcess(...){
             //你的业务代码
         }
    }复制过来的,这个abstract去掉
      

  4.   

    就是将登陆信息保存到客户端的 cookie里面。下次登陆时,先读取客户端cookie如果有记录,并验证正确,就直接跳转