登录后跳转进入登录前的网址

阅读更多
  优化系统的时候拿到网址,登录进去只能看到首页,之前的网址还要再输一遍,比较费事。
    所以选择用Memcached+Cookie来存取登录前的网址。
    1.为每个用户输入的网址设置一个唯一的Token,存入Request的Cookie中。作为Memchched中的key。
    (1)//通过loginTokenName取出Cookie中的TokenStr。
            String tokenStr = ServletUtil.getCookieValue(request,LoginConstants.loginTokenName);
            //检查Token是否为空,格式是否符合,若不是,则重新设置Token。
if(!Token.checkToken(tokenStr)){
Token token = Token.getToken(request);
tokenStr = token.toCookieString();//通过requeat中的mac ;System.currentTimeMillis() ;PID;clientIp;构建Token.
ServletUtil.addCookie(response,LoginConstants.loginTokenName, tokenStr, LoginConstants.cookieTime);
                            //LoginConstants.loginTokenName作为key,tokenStr作为value。存入request中。
//key = LoginConstants.loginTokenName+tokenStr;
}
    (2)////重定向到 toLogin 
       String callBackUrl = request.getRequestURI().toString();
       callBackUrl += getReqParaPairToStr(request);//传参URL中的参数
       callBackUrl = URLEncoder.encode(callBackUrl,"utf-8");//编码
       response.sendRedirect("/back/userlogin/toLogin.do?callBackUrl="+callBackUrl); 
    (3)    //实现页面跳转到登录方法:
        public String  toLogin(String callBackUrl){
//保存callBackUrl路径到Memcached中
MemcachedUtil.setObject(LoginUtil.getLoginCallBackURLKey(request),callBackUrl, LoginConstants.callBackUrlTime);
return "back/login";
            }
    (4)//在登录时候取出Url
String callBackUrl= (String)MemcachedUtil.getObject(LoginUtil.getLoginCallBackURLKey(request));
String LoadUrl;
if(callBackUrl==null){
LoadUrl = ConfigConstants.backFirstPage;
}else{
callBackUrl=callBackUrl.replace(':', '=');
callBackUrl=callBackUrl.replace(',', '&');
LoadUrl = callBackUrl;
}
                        return "redirect:"+LoadUrl;
突然发现这样做很麻烦,数据不好取,可能我还没看到他的好处。

你可能感兴趣的:(memcached,Cookie,重定向,登录前的网址)