Senhores … estou estudando JSF fiz uma aplicaçãozinha simples que efetua o login por jsf e criei um filtro para tal conmtrole da aplicação onde verifico por por /sistema/* se o cara ta logado … tudo funciona valida login e tudo … e gravo o beans a nivel de sessao … mas quando faço logout … se o cara clicar no botao voltar do browser e dar um F5 ele loga novamente pois ele reenvia as informações de login … alguem sabe como fugir disso ??
Quando o usuário sai do sistema, vc invalida a sessão?
Flws!
overkill
sim amigo uso o metodo “invalidade()”.
mas o problema e o botao voltar mesmo … muito estranho ou falta de esperiencia minha mesmo hehe.
Abraço
W
Wallfox
Coloca o código ai!
overkill
cara o lance é so no filtro mesmo !
mas ao meio dia posto ai o esquema do filtro que to usando pois nao tenho aqui .
humberto.lima
Pelo que entendi o seu problema já é conhecido pela comunidade. Ainda bem né? Ainda bem, porque já existe uma solução para isso, chama-se Synchronized Token Pattern, a ideia é criar na sessao do usuário um token, e mandar para a pagina de login o token, na primeira vez q ele fizer login o token ta igual ao da sessão, ai tudo bem(lembrar de mudar o token da sessão), na segunda vez o token da sessão vai estar diferente do token da pagina ja que a pagina nao foi carregada do servidor.
Acho q fui claro, mas qualquer coisa pergunta ai…
falow.
Humberto Lima
humberto.lima
como é q remove uma mensagem?
Humberto Lima
overkill
HUmmm cara … nao ficou claro não … eu faço a validação no bean … e registro a sessao …
mas nao ficou claro nao desculpe mas sou iniciante como vc mesmo pode ter percebido … estou abandonado o PHP e estou motivado a fazer isso gostei do JSF mas estou apanhando em pegar as teorias … mas estou indo … hehehe
agradeço se puder ajudar … exemplos documentação anexa qualquer coisa relacionada ao assunto … abraço !
humberto.lima
Infelizmente não encontrei uma implementação para jsf. Segue um exemplo com struts
public final ActionForward perform(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
HttpSession session = request.getSession();
ActionForward forward = null;
if (isTokenValid(request)) {
// Reset token and session attributes
reset(request);
try {
// Perform the action and store the results
forward = performSynchro(mapping, form, request, response);
session.setAttribute(FORM_KEY, form);
session.setAttribute(FORWARD_KEY, forward);
ActionErrors errors = (ActionErrors)
request.getAttribute(Action.ERROR_KEY);
if (errors != null && !errors.empty()) {
saveToken(request);
}
session.setAttribute(ERRORS_KEY, errors);
session.setAttribute(COMPLETE_KEY, "true");
} catch (IOException e) {
// Store and rethrow the exception
session.setAttribute(EXCEPTION_KEY, e);
session.setAttribute(COMPLETE_KEY, "true");
throw e;
} catch (ServletException e) {
// Store and rethrow the exception
session.setAttribute(EXCEPTION_KEY, e);
session.setAttribute(COMPLETE_KEY, "true");
throw e;
}
} else {
// If the action is complete
if ("true".equals(session.getAttribute(COMPLETE_KEY))) {
// Obtain the exception from the session
Exception e = (Exception) session.getAttribute(EXCEPTION_KEY);
// If it is not null, throw it
if (e != null) {
if (e instanceof IOException) {
throw (IOException) e;
} else if (e instanceof ServletException) {
throw (ServletException) e;
}
}
// Obtain the form from the session
ActionForm f = (ActionForm) session.getAttribute(FORM_KEY);
// Set it in the appropriate context
if ("request".equals(mapping.getScope())) {
request.setAttribute(mapping.getAttribute(), f);
} else {
session.setAttribute(mapping.getAttribute(), f);
}
// Obtain and save the errors from the session
saveErrors(request, (ActionErrors)
session.getAttribute(ERRORS_KEY));
// Obtain the forward from the session
forward = (ActionForward) session.getAttribute(FORWARD_KEY);
} else {
// Perform the appropriate action in case of token error
forward = performInvalidToken(mapping, form, request, response);
}
}
return forward;
}
No jsf vc pode colocar no Bean um atributo “token” e deixar na sessão(FacesContext.getCurrentInstance().getExternalContext().getSession()) outro.