使用Cookie Authenticator restlet实现Rememberme功能

时间:2017-07-07 05:34:33

标签: google-app-engine cookies session-cookies restlet

代码:

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请求时选择的最新值。

0 个答案:

没有答案