优化系统的时候拿到网址,登录进去只能看到首页,之前的网址还要再输一遍,比较费事。
所以选择用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来存取登录前的网址。
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;
突然发现这样做很麻烦,数据不好取,可能我还没看到他的好处。