Ich bin nur enabled Session in meiner Google AppEngine/Java + GWT-Anwendung. Und wie benutze ich es? Wie bekomme ich Session-ID und spielen alle guten Sachen daraus? Gibt es echte Beispiele für einfache Login-Seite, wo ich nur LoginName und Passwort eingeben, dann geht es über RPC-Aufruf an den Server, authentifiziert sich gegen Datenbank und sendet Session ID zurück zum Client.Google AppEngine Session Beispiel
Ich habe folgenden Code schon, aber nicht wissen, was als nächstes zu tun ist: in die richtige Richtung
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;
}
}
Irgendwelche Hinweise:
GWT Login Form:
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 Servlets Wäre hilfreich. Danke.
Seien Sie vorsichtig, wenn Sie gerade ein Cookie auf Basis sessionId für die Authentifizierung verwenden, wie es Ihnen offen für Cross-Site-Scripting-Angriffe verlassen können: http://groups.google.com/group/Google-Web-Toolkit/web/security-for-gwt-applications –