Amigos criei um filter para que o usuário seja obrigatório a se logar, e quando isso acontece “seto” um variável do tipo boolean para true em que momento devo setar essas variável para false, pois se eu fecho o browser e abro novamente consigo acessar o sistema sem se logar, isso porque essa variável esta com o valor true
Essa variável está salva na sessão ou aonde???
Se for na sessão você faz um session.invalidate(); quando o cara clicar no botão de deslogar,e quando o cara fecha a pagina essa variável vai embora também,porque limpa a sessão…
Essa variável e um boolean, queria colocar ela na sessão mas quando ocorre alguma ação q passa pelo meu Filter novamente o atributo que coloquei na sessão esta nulo.
Cara,na sessão ela só vai perder o valor se você invalidar a sessão,fechar a pagina ou preencher ela com outro valor…
Vamos lá… Vou explicar melhor,
tenho o método abaixo minha pergunta inicial era como eu setar o valor false na variável usuarioLogado …
Isso porque estou tentando colocar o usuário logado na sessão conforme abaixo mas esta dando Null Pointer aqui facesContext.getExternalContext()…
ai queria saber como posso atribuir contexto nesse trecho que esta dando o erro,
quando faço isso no Mbean funciona mas como mapeio meu Filter no web.xml acho q nesse momento ele não e preenchido
HttpSession sessaoHttp = (HttpSession) facesContext.getExternalContext().getSession(true);
sessaoHttp.setAttribute("usuarioLogado", loginTO.getUsuario());
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain) throws IOException, ServletException
boolean usuarioLogado = false;
try {
if(usuarioLogado == false){
String link = "http://" + httpServletRequest.getServerName() + ":"+ httpServletRequest.getLocalPort() + LOGIN_URL;
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<script>parent.location.href='"+link+"'</script>");
out.close();
}else{
if(usuarioLogado == true){
filterChain.doFilter(request, response);
HttpSession sessaoHttp = (HttpSession) facesContext.getExternalContext().getSession(true);
sessaoHttp.setAttribute("usuarioLogado", loginTO.getUsuario());
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
Cara,porque você não faz assim,tem um controller que verifica se aquele usuario existe ou não certo???
Se o cara e a senha dele existir,esse cara tá logado
dai você define
boolean usuarioLogado = true;
httpSession.setAttribute("usuarioLogado" ,usuarioLogado);
Pronto,o cara está logado,agora o cara quer requisitar uma página e essa requisição vai chamar o filtro,dai no filtro você pega o valor usuarioLogado e verifica se ele está logado.
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain) throws IOException, ServletException
try {
HttpSession httpSession = request.getSession();
boolean usuarioLogado = httpSession.getAttribute("usuarioLogado");
if(usuarioLogado == false){
String link = "http://" + httpServletRequest.getServerName() + ":"+ httpServletRequest.getLocalPort() + LOGIN_URL;
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<script>parent.location.href='"+link+"'</script>");
out.close();
}else{
if(usuarioLogado == true){
filterChain.doFilter(request, response);
HttpSession sessaoHttp = (HttpSession) facesContext.getExternalContext().getSession(true);
sessaoHttp.setAttribute("usuarioLogado", loginTO.getUsuario());
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
Terei que mudar a forma que isto esta sendo feito,
Hj existe um sistema que a função dele e apenas validar o usuário no AD e direciona para o Menu, quando o usuário escolhe a opção do Menu e redirecionando para outro sistema e já faz um insert do usuário que foi logado para que o sistema 2 utilize esse usuário,
o problema e q eu criei esse Filter no sistema 2 e eu teria que setar o usuário em um atributo nesse Filter mas isso no Filter não esta funcionando, Não tenho esse controller no sistema 2, apenas o Filter que redireciona para a tela no qual e um relatório…
Entendi,como eu falei cara,você precisa verificar se o cara está logado,e dai atribuir algum sinal de que ele está logado ,isso na sessão e verificar sempre por esse “sinal”