Login (Páginas abrem mesmo sem estar logado)

20 respostas
A

Bom dia pessoal,

Criei um sistema de login, porém, se o usuário digitar as URLs manualmente, as páginas abrem. Alguém sabe o que eu preciso fazer para resolver esse problema?

Grato,
Alexandre Palmeira

20 Respostas

G

filtro

wbdsjunior

apalmeira:
Bom dia pessoal,

Criei um sistema de login, porém, se o usuário digitar as URLs manualmente, as páginas abrem. Alguém sabe o que eu preciso fazer para resolver esse problema?

Grato,
Alexandre Palmeira


veja se tutorial sobre JAAS pode ajudá-lo.

abraço.

A

Obrigado pela ajuda pessoal!

Existe alguma forma de criar o filtro de utilizar o JAAS?

G

Obrigado pela ajuda pessoal!

Existe alguma forma de criar o filtro de utilizar o JAAS?

ein ?? :?:

A

Desculpem, sou leigo nesse assunto!
Alguém pode indicar um tutorial de como criar um filtro no Eclipse, e até mesmo do que é possível fazer com um filtro?

Grato.

diogoprosoft

que framework vc esta usando?

Primeiramente vc tera que ter uma ActionBase, ou um Interceptor e tera que fazer as validações necessarias para situacao.

peczenyj

Se as paginas abrem mesmo sem estar logado vc pode ter duzias de problemas.

Pode ser problema com a criação/exclusão de cookie, pode ser falha no seu sistema de autenticação, pode ser que vc esteja usando Basic Autentication (nesse caso vc deve fechar o browser - todas as instâncias - e abrir de novo). Enfim sem saber mais fica dificil ajudar.

G

se vc estiver usando jsf é so usar um phaselistener q resolve o problema …

A

Olá amigo,

Estou usando o JSF. Como funciona esse phaselistener? você pode indicar algum tutorial?

Grato.

G

bom … antes de mais nada vc deveria estudar o ciclo de vida do jsf, procura no google tem varios bons artigos, a ibm tem um q eu particularmente acho mto bom.

o phase listener funciona assim … a cada fase do ciclo de vida do jsf ele passa por uma especie de filtro.

public class LoginListener implements PhaseListener{

	public void afterPhase(PhaseEvent p) {	
//aqui vc implmenta o filtro do usuario
	}

	public void beforePhase(PhaseEvent arg0) {
		
		
	}

	public PhaseId getPhaseId() {
		return PhaseId.RESTORE_VIEW;
	}

}
Z111

google ajuda…

http://www.rodrigolazoti.com.br/?p=56

A

Valeu galera!
Eu já tinha procurado no google, mas eu nem sabia desse recurso “phaselistener”, por isso, não encontrei muita coisa!

Mais uma vez, obrigado!

[RESOLVIDO]

Kleber-rr

Z:
google ajuda…

http://www.rodrigolazoti.com.br/?p=56


Olá Z,

Eu estou tentando implementar o PhaseListener no meu projeto, mas estou tendo problemas com o ciclo da minha aplicação: o phaselistener só me libera o acesso à pagina inicial, após o login. A partir dessa pagina inicial, se eu tento acessar outro link ou acessar o banco, ele me volta à pagina de login.

O que pode ser?

Valeu!

eve_bsi

Oi pessoal, estou com o mesmo “problema”…
As páginas abrem se o usuario nao estiver logado, e apenas digitar o pagina na barra d enderço…
Mas estou utilizando servlets e JSP
Esse filtro, funciona da mesma maneira para servlet?

Pilon

Simples, coloque as páginas JSPs dentro da pasta WEB-INF, elas não estarão disponíveis via URL.

eve_bsi

Uhm não deu certo…
É só colocar as telas na pasta web-inf? não preciso fazer mais nada?
Deu erro :frowning:

Pilon

Colocar as páginas dentro do WEB-INF não permite o acesso via URL, assim você só precisa fazer o login e redirecionar para a página certa. O caminho delas tambem muda, passa a ser /WEB-INF/pagina.jsp.

eve_bsi

Ah, não sei o q estou fazendo de errado, mas não funcionou…
Fiz como falou, coloquei minhas telas na WEB-INF e só mudei o caminho das paginas…
E não deu… :frowning:

ctdaa

Vou utilizar este tópico porque o assunto é semelhante.
Estou usando um exemplo de PhaseListener para autenticação. Está quase funcionando, mas o método seguinte:

String path = extContext.getRequestPathInfo();

está retornando sempre null e assim não está desviando para a página de login. Alguém sabe como corrigir?

Segue o código da PhaseListener:

/**
 * <p>This <code>PhaseListener</code> will be take action before
 * the <code>Restore View</code> phase is invoked.  This allows
 * us to check to see if the user is logged in before allowing them
 * to request a secure resource.  If the user isn't logged in, then
 * the listener will move the user to the login page.</p>
 * @author rlubke
 */
public class AuthenticationPhaseListener implements PhaseListener {
    
    /**
     * <p>The outcome to trigger navigation to the login page.</p>
     */
    private static final String USER_LOGIN_OUTCOME = "login";
       
    // ---------------------------------------------- Methods from PhaseListener

    /**
     * <p>Determines if the user is authenticated.  If not, direct the
     * user to the login view, otherwise all the user to continue to the
     * requested view.</p>
     *
     * <p>Implementation Note: We do this in the <code>afterPhase</code>
     * to make use of the <code>NavigationHandler</code>.</p>
     */
    public void afterPhase(PhaseEvent event) {
        FacesContext context = event.getFacesContext();
       
        System.out.println("OLA.... estou no PhaseListener");
        if (userExists(context)) {
            // allow processing of the requested view
            return;
        } else {            
            // send the user to the login view
            if (requestingSecureView(context)) {
                context.responseComplete();              
                context.getApplication().
                        getNavigationHandler().handleNavigation(context, 
                                                                null, 
                                                                USER_LOGIN_OUTCOME);
            }
        }
    }

    /**
     * <p>This is a no-op.</p>
     */
    public void beforePhase(PhaseEvent event) {        
    }

    /**
     * @return <code>PhaseId.RESTORE_VIEW</code>
     */
    public PhaseId getPhaseId() {
        return PhaseId.RESTORE_VIEW;
    }
    
    // --------------------------------------------------------- Private Methods       
    
    /**
     * <p>Determine if the user has been authenticated by checking the session
     * for an existing <code>Wuser</code> object.</p>
     * 
     * @param context the <code>FacesContext</code> for the current request
     * @return <code>true</code> if the user has been authenticated, otherwise
     *  <code>false</code>
     */
    private boolean userExists(FacesContext context) {
        ExternalContext extContext = context.getExternalContext();
        return (extContext.getSessionMap().containsKey(PessoaJpaController.USER_SESSION_KEY));
    }
     
    /**
     * <p>Determines if the requested view is one of the login pages which will
     * allow the user to access them without being authenticated.</p>
     *
     * <p>Note, this implementation most likely will not work if the 
     * <code>FacesServlet</code> is suffix mapped.</p>
     *
     * @param context the <code>FacesContext</code> for the current request
     * @return <code>true</code> if the requested view is allowed to be accessed
     *  without being authenticated, otherwise <code>false</code>
     */
    private boolean requestingSecureView(FacesContext context) {
        ExternalContext extContext = context.getExternalContext();       
        String path = extContext.getRequestPathInfo();
        System.out.println("OLA.... estou no SecureView " + path);
        return (!"/pages/main/login.jsf".equals(path) && !"/pages/main/create.jsf".equals(path));
    }
}
ctdaa

O problema foi resolvido trocando o “getRequestPathInfo” por “getRequestServletPath”

private boolean requestingSecureView(FacesContext context) {
        ExternalContext extContext = context.getExternalContext();
        String sp = extContext.getRequestServletPath();
        return (!"/pages/main/login.jsf".equals(sp) && !"/pages/main/create.jsf".equals(sp));
    }
Criado 13 de abril de 2009
Ultima resposta 28 de out. de 2009
Respostas 20
Participantes 10