GWT - Session

7 views
Skip to first unread message

Guilherme Povala

unread,
Aug 4, 2010, 5:54:43 PM8/4/10
to gujsmo
Então, o problema que estou tendo é o seguinte:

Quero fazer uma tela de login (a verificação se existe no DB já fiz,
tudo funcionando), o único problema é que quero fazer com uma sessão
na página, para o usuário logar e quando atualizar continuar logado, e
não pedir novamente o login e a senha!

As classes que tenho são as seguintes...

Método que inicia
[...]

public void onModuleLoad() {
validarSessao();
}

//Evento do Botão

enviarButton.addClickHandler(new ClickHandler() {

@Override
public void onClick(ClickEvent event) {
serviceModel = new LoginModel();
serviceModel.setUser(loginTextBox.getText());
serviceModel.setPasswd(senhaTextBox.getText());

LoginServiceAsync loginServiceAsync =
GWT.create(LoginService.class);

AsyncCallback<String> asyncCallback = new
AsyncCallback<String>() {

@Override
public void onSuccess(String result) {
if (result != null) {
RootPanel.get().clear();
RootPanel.get().add(new Main());
Cookies.setCookie("session", result, new
Date(System.currentTimeMillis() + TWO_MIN));
sessionId.setSessionId(result);

} else {
exibeLabel("Login ou Senha inválidos!");
}
}

@Override
public void onFailure(Throwable caught) {
Window.alert(caught.toString());
System.out.println(caught);
}
};

loginServiceAsync.login(serviceModel, asyncCallback);
}
});

private void validarSessao() {
SessionServiceAsync sessionServiceAsync =
GWT.create(SessionService.class);
AsyncCallback<SessionModel> asyncCallback = new
AsyncCallback<SessionModel>() {

@Override
public void onFailure(Throwable caught) {

}

@Override
public void onSuccess(SessionModel result) {
if
(sessionId.getSessionId().equals(result.getSessionId())) {
RootPanel.get().clear();
RootPanel.get().add(new Main());
} else if (result == null || !
sessionId.getSessionId().equals(result.getSessionId())) {
init();
RootPanel.get().add(criaFormulario());
}
}
};

sessionServiceAsync.session(sessionId, asyncCallback);
}
[/...]


public class SessionModel implements IsSerializable {

private static final long serialVersionUID = 4637358200152132934L;
private String sessionId = "";

public void setSessionId(String sessionId) {
if (sessionId == null) {
this.sessionId = "";
} else {
this.sessionId = sessionId;
}
}

public String getSessionId() {
return sessionId;
}
}

// No Lado do Servidor

public class LoginServiceImpl extends RemoteServiceServlet implements
LoginService {

private static final long serialVersionUID = 270628040929463623L;

@Override
public String login(LoginModel user) {
LoginServiceDAO service = new LoginServiceDAO();
if (user != null && service.select(user.getUser(),
user.getPasswd()) != null) {
HttpSession httpSession =
getThreadLocalRequest().getSession();
httpSession.setMaxInactiveInterval(1000 * 60 * 2);
return httpSession.getId();
}
return null;
}
}


public class SessionServiceImpl extends RemoteServiceServlet
implements SessionService {
private static final long serialVersionUID =
-6274876845484737659L;

@Override
public SessionModel session(SessionModel sessionId) {
HttpSession httpSession =
getThreadLocalRequest().getSession(false);
if (httpSession != null) {
try {
sessionId.setSessionId(httpSession.getId());
} catch (IllegalStateException e) {
sessionId.setSessionId("");
}
return sessionId;
}
return null;
}
}



Então, não sei como resolver esse problema! Se alguem conseguir...
Ficarei grato!
Reply all
Reply to author
Forward
0 new messages