12 Stimmen

Google AppEngine Session Beispiel

Ich habe gerade aktivierte Sitzung in meiner Google AppEngine/Java + GWT-Anwendung. Und wie verwende ich sie? Wie erhalte ich die Sitzungs-ID und wie spiele ich die ganzen guten Sachen daraus? Gibt es irgendwelche realen Beispiele für einfache Login-Seite, wo ich nur LoginName und Passwort eingeben, dann geht es an den Server über RPC-Aufruf, authentifiziert gegen Datenbank und sendet Session-ID zurück an den Client.

Ich habe bereits folgenden Code, weiß aber nicht, was ich als nächstes tun soll:

GWT-Anmeldeformular:

public class LoginForm {
    private final LoginServiceAsync loginService = GWT.create(LoginService.class);

    VerticalPanel loginVp = new VerticalPanel();
    TextBox loginTxt = new TextBox();
    TextBox passTxt = new TextBox();

    Button loginBtn = new Button("Login");

    public Widget getLoginWidget(){

        loginBtn.addClickHandler(new ClickHandler(){

            public void onClick(ClickEvent arg0) {

                loginService.authenticateUser(loginTxt.getText(), passTxt.getText(), 
                        new AsyncCallback<String>(){

                            public void onFailure(Throwable caught) {
                                InfoPanel.show(InfoPanelType.HUMANIZED_MESSAGE, "No Connetion", "Problem conneting to the server.");
                            }

                            public void onSuccess(String result) {
                                InfoPanel.show(InfoPanelType.HUMANIZED_MESSAGE, "Session ID", "Your session id is: " + result);

                                GWT.log("Setting up session", null);
                                String sessionID = result;
                                final long DURATION = 1000 * 60 * 60 * 24 * 14; //duration remembering login. 2 weeks
                                Date expires = new Date(System.currentTimeMillis() + DURATION);
                                Cookies.setCookie("sid", sessionID, expires, null, "/", false);
                            }
                        }
                );  
            }   
        });

        loginVp.add(loginTxt);
        loginVp.add(passTxt);
        loginVp.add(loginBtn);

        return loginVp;
    }
}

RPC-Servlet:

public class LoginServiceImpl extends RemoteServiceServlet implements LoginService{ 
    //Sends back to the client session id
    public String authenticateUser(String login, String password){
        String sessionId = new String();

        // TODO: figure out how to work with session id in GAE/J
        sessionId = "How to get session id?";

        return sessionId;
    }

    public Boolean checkIfSessionIsValid(String sessionId){

        //TODO: figure out how to check user's credentials  
        return true;
    }
}

Jeder Hinweis auf die richtige Richtung wäre hilfreich. Danke!

18voto

Thilo Punkte 248982

Durch die Aktivierung der Sitzungsunterstützung erhalten Sie eine Standard-Servlet-HttpSession.

Dies wird mit Hilfe eines Cookies (JSESSONID genannt) verfolgt, der vom Servlet-Container unter der Haube verwaltet wird. Sie müssen sich nicht um die Session-ID kümmern.

Sie können dann (serverseitig) Attribute festlegen, die mit der Sitzung verknüpft werden (so dass Sie sie später abrufen können).

HttpServletRequest request = this.getThreadLocalRequest();

HttpSession session = request.getSession();

// in your authentication method
if(isCorrectPassword)
   session.setAttribute("authenticatedUserName", "name");

// later
 if (session.getAttribute("authenticatedUserName") != null)

Dies sollte auch mit Ajax-Anfragen von GWT funktionieren. Weitere Einzelheiten finden Sie in jedem Servlet-Tutorial.

Der Nachteil von Sessions auf GAE (im Vergleich zu anderen Servlet-Engines) ist, dass sie jedes Mal serialisiert und aus der Datenbank geladen werden, was teuer werden kann, vor allem, wenn man eine große Menge an Daten einträgt.

16voto

KevMo Punkte 5540

Hier erfahren Sie, wie Sie die Sitzung in GAE erhalten:

this.getThreadLocalRequest().getSession();

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X