ViewHandler - Autenticação de Usuarios

6 respostas
leod

Boa Noite Pessoal,

Alguem ja uso a validação usando a classe abstrata ViewHandler?

Eu estendi ela, mas quando eu chamao um página, ela da um erro estranho. Não consegui resolver!!!!

Estou usando o seguinte:

myfaces 1.1.4
tomahawk 1.1.3

/**
 * 
 */
package com.fretadoalphaville.view;

import java.io.IOException;
import java.util.Locale;

import javax.faces.FacesException;
import javax.faces.application.ViewHandler;
import javax.faces.component.UIViewRoot;
import javax.faces.context.FacesContext;

import com.fretadoalphaville.entities.User;
import com.fretadoalphaville.navigation.NavigationJSPKeys;


/**
 * @author Leonardo
 *
 */
public class AuthenticatingViewHandler extends ViewHandler{

	private final ViewHandler base;
	
	public AuthenticatingViewHandler(ViewHandler base) {
		this.base = base;
	}
	
	@Override
	public UIViewRoot createView(FacesContext facesContext, String s) {
		User user = (User) facesContext.getExternalContext().getSessionMap().get("user");
	     if (user == null) 
	       s = NavigationJSPKeys.USER_LOGIN;
	 
	     return base.createView(facesContext, s);	
	}
	@Override
	public Locale calculateLocale(FacesContext arg0) {
		return this.calculateLocale(arg0);
	}

	@Override
	public String calculateRenderKitId(FacesContext arg0) {
		return this.calculateRenderKitId(arg0);
	}

	@Override
	public String getActionURL(FacesContext arg0, String arg1) {
		return this.getActionURL(arg0, arg1);
	}

	@Override
	public String getResourceURL(FacesContext arg0, String arg1) {
		return this.getResourceURL(arg0, arg1);
	}

	@Override
	public void renderView(FacesContext arg0, UIViewRoot arg1) throws IOException, FacesException {
		this.renderView(arg0, arg1);
	}

	@Override
	public UIViewRoot restoreView(FacesContext arg0, String arg1) {
		return this.restoreView(arg0,arg1);
	}

	@Override
	public void writeState(FacesContext arg0) throws IOException {
		this.writeState(arg0);		
	}
}
So que quando eu chamo uma página, a index por exemplo ele da o seguinte erro
exception

javax.servlet.ServletException
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:156)
	org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:97)
	org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:144)

root cause

java.lang.StackOverflowError
	com.fretadoalphaville.view.AuthenticatingViewHandler.calculateLocale(AuthenticatingViewHandler.java:40)

Alguem sabe como resolver isso?

6 Respostas

casmeiron

Se você retirar a recursão infinita dos seus métodos funciona :slight_smile:

método sobrescrito que chama ele mesmo? StackOverFlow na kra!

urubatan

traduzindo:

@Override
 	public Locale calculateLocale(FacesContext arg0) {
 		return this.calculateLocale(arg0);
 	}

deveria ser:

@Override public Locale calculateLocale(FacesContext arg0) { return super.calculateLocale(arg0); }

e o mesmo para os outros metodos …

leod

Que coisa né!

Mas so uma coisa, como eu posso colocar super.metodo(), se o metodo é abstrato? quando o metodo é abstrato eu tenho que implementalo certo?
Eu me confundi um poouco , hauahuaha.

Eu estendi a classe JspViewHandlerImpl que extend a bendita ViewHandler, e ta fazendo o que eu queria!!

So mais uma coisa, essa é melhor maneira de validar o acesso do usuario, pq todos as requisições seriam “tratadas” por essa classe?

Outro dia vi aqui mesmo, que um cara queria fazer um xml, com as paginas que poderiam ser acessadas sem logar, e isso seria tratado na “mao”, é a maneira mais facil?

O que vocês acham?

Valew pesssoal!

urubatan

eu prefiro um filter pra fazer isto …

casmeiron

Dê uma olhada na interface Filter, também na criação de perfis, busque no google sobre JAAS vc vai encontrar muita coisa util :slight_smile:

sauron_fight

Olá, estou com um problema nao sei o que eu fiz,
mais minha aplicação esta dando o seguinte erro

javax.servlet.ServletException: Tentativa ilegal de definir ViewHandler depois de uma resposta ter sido renderizada.

Agradeco a todos.

Criado 11 de fevereiro de 2007
Ultima resposta 25 de mai. de 2011
Respostas 6
Participantes 4