GARANTIR DESCONTO

Fórum JSF - Controle de session #4596

16/04/2009

0

como faço para controlar se o usuario esta logado?...eu tenho um "logout.jsp" que dá um "session.invalidate" e limpa a session, como faço para evitar que o usuario depois de da logout não reveja os pagina e acesse novamente as pagina sem ter dado login?
Pirahy Alimentos

Pirahy Alimentos

Responder

Posts

17/04/2009

Henrique Weissmann

Isto pode ser resolvido com a inclusão de um Filtro JSP.

Dê uma olhada neste artigo da DevMedia a respeito:
https://www.devmedia.com.br/articles/viewcomp.asp?comp=1720

No caso, o seu filtro deverá verificar a presença do usuário na sessão e, não o encontrando, fazer o redirecionamento desejado.
Responder

Gostei + 0

17/04/2009

Pirahy Alimentos

se vc pudesse me explicar uma pouco mais esse exemplo do link, fico agradecido, pois não entendi a parte de qual pagina ele vai bloquear, tanto que testei em minha aplicação e não aconteceu nada.... quando dou logout e logo dou um voltar, o usuario consegue acessar as paginas da mesma forma.... como se não desse logout....
Responder

Gostei + 0

23/04/2009

Henrique Weissmann

Olá Pirahy,

o funcionamento de um filtro na plataforma Java Enterprise Edition funciona da seguinte maneira: antes de qualquer requisição ser enviada a um servlet, o servidor verifica a existência de algum filtro e, estando este implementado/presente na aplicação, executa o método doFilter do mesmo.

Então, dentro do método doFilter, o próprio filtro especifica se será feito o redirecionamento para determinada URL ou não. No caso do exemplo que te passei, vamos dar uma olhada neste método:

public void doFilter(ServletRequest req, ServletResponse res,                   FilterChain chain) throws IOException, ServletException {
// É obtida a sessão do usuário
            HttpSession session = ((HttpServletRequest)req).getSession();// É verificada a existência de uma instância da classe usuário dentro da mesma
            Usuario usuario = (Usuario)session.getAttribute("usuario");             if(usuario==null){// É definido um novo atributo na sessão chamado msg, contendo a mensagem "Você não está logado no sistema!"
                  session.setAttribute("msg","Você não está                              logado no sistema!");// Finalmente, é feito um redirecionamento para a página index.jsp, presente um diretório acima da URL do filtro
                  ((HttpServletResponse)res).sendRedirect("../index.jsp");             }else{                   chain.doFilter(req, res);             }       }
Porém, para que o filtro funcione, é necessário que você também configure o seu arquivo web.xml para torná-lo visível ao servidor.

<filter>             <filter-name>Filtro Seguranca</filter-name>             <filter-             class>br.com.javamagazine.jairelton1.FiltroSeguranca</filter-class>       </filter>       <filter-mapping>             <filter-name>Filtro Seguranca</filter-name>             <url-pattern>/admin/*</url-pattern>       </filter-mapping>
No caso, como você pode ver, são definidos os seguintes atributos dentro das configurações:
filter-name: o nome do filtro. Pode ser o nome que você quiserfilter-class: o nome da classe que implementa a interface Filterurl-pattern: quais os padrões de url que o filtro deverá interceptar
Pelo que você me contou no seu post anterior Pirahy, eu acredito que o seu problema deva estar no terceiro parâmetro. O filtro só é ativado quando as URLs batem com o padrão definido neste parâmetro.
Sendo assim, se o usuário acessar a URLhttp://www.suaaplicacao.com.br/qualquercoisaO filtro não será ativado.Porém, se acessarhttp://www.suaaplicacao.com.br/admin/qualquercoisa.jspO filtro já será chamado.
Se você quisesse que o filtro fosse aplicado a todo o seu site, teria de aplicar uma url comourl-pattern:/*
Porém, neste caso, você teria um problema, pois mesmo o seu servlet responsável pelo login seria bloqueado. Neste caso portanto, você precisaria trabalhar a URL dentro do método doFilter do seu filtro para que lidasse com esta excessão.


Responder

Gostei + 0

27/04/2009

Devmedia

Senhor,
a resposta do consultor solucionou a sua dúvida? Podemos encerrar o chamado?
Responder

Gostei + 0

29/04/2009

Devmedia

Senhor,
por falta de resposta encerramos o seu chamado. Caso ainda possua alguma sobre esse assunto, por favor, post a mesma que o consultor voltará a lhe atender.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar