Redirecionar para tela de login!

7 respostas
J

Dae galera.. estou passando por um problema.... tenho um sistema web utilizando servlets, jsp, etc.... e criei um filtro pra verficar se o cara ta logado e tal.... na minha pagina eu tenho a principal e dentro da principal tem um iframe.. nesse iframe que é aberto todas as janelas do menu.. , só que se eu tentar acessar uma pagina sem me logar.. ele redireciona para o login.. até aí tudo certo.. o problema é que ele redireciona dentro do iframe.. e eu quero que ele abra apenas a pagina do login.. do jeito que esta fica o topo(menus) e o login abaixo.... Segue as minhas classes:

Tenho um command que é o meu login, ele é chamado por um servlet controlador:

public void doAction(HttpServletRequest request, HttpServletResponse response, ServletContext context) throws ServletException {
        try {
            /*response.setContentType("text/html");
            PrintWriter out = response.getWriter();
            out.println("<script>parent.location.href='" + request.getContextPath() + "/jsp/frmLogin.jsp'</script>");
            out.flush();            
            out.close();
            return;             */
            RequestDispatcher disptcher = context.getRequestDispatcher("/jsp/frmLogin.jsp");
            disptcher.forward(request, response);

        } catch (Exception e) {
            throw new ServletException(e.getMessage());
        }
    }

O meu Filtro de controle:

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        boolean isValid = false;
        try {
            isValid = verifyAccess((HttpServletRequest) request);
        } catch (Exception e) {
            throw new ServletException(e.getMessage());
        }
        if (!isValid) {            
            //request.setAttribute("url_login", getNextURL(( HttpServletRequest)request));
            String url = ((HttpServletRequest)request).getContextPath()+"/jsp/frmLogin.jsp";            
            filterConfig.getServletContext().getRequestDispatcher("/ServDocumentoController?command=login").forward(request,response);
            //((HttpServletResponse) response).sendRedirect("ServDocumentoController?command=login");
            ((HttpServletResponse)response).getWriter().flush();
            ((HttpServletResponse)response).getWriter().close();
            return;
        }
        chain.doFilter(request, response);
    }
    
    public void destroy() {
    }
    
    protected boolean verifyAccess(HttpServletRequest request) throws Exception{
        
        UsuarioVO usuario = ( UsuarioVO ) request.getSession().getAttribute("user");
        boolean isInvalidSistema = false;
        if( usuario!= null)
            isInvalidSistema = true;
        
        return isInvalidSistema;
    }
Meu jsp que tem o topo e o iframe:
<table style="height:100%;" width="700" border="0" align="center" cellpadding="0" cellspacing="0">
            <tr>
                <td bgcolor="#FFFFFF" style="height:50;">
                    <jsp:include page="frmHeader.jsp" />
                </td>
            </tr>
            <tr>
                <td bgcolor="#FFFFFF" style="height:100%;">
                    <iframe id="iframePrincipal" name="iframePrincipal" frameborder="0" height="100%" width="100%" allowtransparency="true">corpo</iframe>
                </td>
            </tr>
        </table>
Tentei algumas alternativas.. como colocar o seguinte codigo:
PrintWriter out = response.getWriter();
            out.println("<script>parent.location.href='" + request.getContextPath() + "/jsp/frmLogin.jsp'</script>");
            out.flush();            
            out.close();

Coloquei esse códido no lugar do forward do filter e no lugar do forward do command.. só que ele fica como se estivesse tentando abrir varias vezes... como se entrasse em loop... alguem sabe como fazer isso??
Como eu posso redirecionar apenas para a pagina de login sem aparecer o resto da minha pagina??
Abraço!!

7 Respostas

J

Dae galera… a um tempo atraz postei esse tópico… não obtive respostas e também não encontrei nada na net… dae eu deixei esse problema mais pra frente… agora estou reabrindo o tópico pra ver se alguém tem alguma dica ou já passou por isso… pois estou procurando na net ja faz um tempão e nada… dae se alguém tiver passado por isso e tiver alguma dica será de grande ajuda!!
Abraço e fiquem com Deus!!

pablofaria

Pode usar um comando em javascript

&lt;script&gt;
top.document.location.href='/jsp/frmLogin.jsp';
&lt;/script&gt;
J

Dae cara.. Eu fiz assim... quando a sessão é expirada... ele redireciona para um command que vai para o loginRedirect( O cara que vai ter o redirecionamento em javascript )... mudei o jsp desse login assim:

<%@page contentType="text/html" pageEncoding="iso-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    </head>
    <body>            
        <script>   
            top.document.location.href='jsp/frmLogin.jsp';   
        </script>                
    </body>
</html>

Só que acontece uma coisa estranha... ele abre o link e fica com se estivesse tentando carregar a pagina e começa a aparecer na url algo assim:

http://localhost:8080/SGD/jsp/jsp/jsp/jsp/jsp/jsp/jsp/jsp/jsp/jsp/jsp/jsp/jsp/frmLogin.jsp e vai aumentando infinitamente.... ele entra em loop....
Alguém tem alguma idéia do que seja?

pablofaria

Tá usando Meta Refresh?

J

Não… a unica coisa que estou usando o cabeçalho meta é isso:

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

Muito estranho isso… Abraço!!

D

Estou com esse mesmo problema…

D
pablofaria:
Pode usar um comando em javascript
&lt;script&gt;
top.document.location.href='/jsp/frmLogin.jsp';
&lt;/script&gt;

É melhor utilizar este script do que uma meta-tag refresh, pois a meta tag não redireciona a URL para outra.
Exemplo. Você está em uma tela e clica em um link do tipo logout.jsp daí, com a meta-tag do
tipo refresh, sua página de login ficara´com a URL da página de logout.

Façam o teste e verão ;)

Criado 14 de dezembro de 2007
Ultima resposta 9 de set. de 2008
Respostas 7
Participantes 4