代码:
private CookieAuthenticator createCookieAuthenticator() {
CookieAuthenticator authenticator = new CookieAuthenticator(getContext(), "abc",
"KeyXXX".getBytes()) {
@Override
protected int beforeHandle(Request request, Response response) {
String uri = request.getResourceRef().getRemainingPart();
if ((uri.startsWith("/angular")||(uri.startsWith(this.getLoginPath())
|| uri.startsWith(this.getLogoutPath()) || (uri.startsWith("/checkLogin")))) {
if(uri.startsWith("/checkLogin")){
String rememberme=request.getResourceRef().getQueryAsForm()
.getFirstValue(Config.REMEMBERME);
if(null!=rememberme && rememberme.equalsIgnoreCase("true")){
setMaxCookieAge(2147483647);
}else{
setMaxCookieAge(-1);
}
}
return super.beforeHandle(request, response);
} else { // All other urls
return CONTINUE;
}
}
authenticator.setLoginFormPath("/login.html");
AccountVerifier verifier = new AccountVerifier();
authenticator.setVerifier(verifier);
return authenticator;
}
setMaxCookieAge 在Cookie身份验证器类中设置年龄变量。
但是在来自UI的多个请求的情况下。 新的cookie身份验证器实例已初始化,其中max age = -1。 (会话Cookie)
此Cookieauthenticator restlet类用于托管在Google应用引擎中的服务器。
public class Servlet extends Application {
private ChallengeAuthenticator authenticator;
@Override
public Restlet createInboundRoot() {
this.authenticator = createCookieAuthenticator();
}
在appengine-web.xml中 threadsafe flag-false
在将threadsafe标志更改为true时:仅创建cookie身份验证器的实例,但是将来自不同用户的所有请求 - cookie年龄设置为在检查checklogin请求时选择的最新值。