Bloquear 'usuario informar url'

Boa noite galera,

Estou desenvolvendo uma aplicação utilizando JSF + HIBERNATE, estou tendo um probleminha…Como sou novo em java estou utilzando um menu a base de template, ou seja eu verifico o perfil do usuário logado, dependendo do perfil eu libera o devido template para ele. Só que agora vem o problema, tem alguma forma de eu não deixar o usuário passar o link da página pela a URL. Tipo, quando o usuário com o perfil administrador a URL é essa aplicação/menu.xhtml e quando o usuário com perfil de usuário comum logar a URL é está aplicação/menuUsuario.xhtml.

Eu queria fazer com que o usuário comum não informa-se a URL aplicação/menu.xhtml e visualiza-se os menus que o administrador tem direito.

Espero ter deixado claro.

Obrigado.

Não sei se eu entendi também, mas você colocar um rendered na página que você quer mostrar ou não.
tipo <h:panelGrid columns="1" rendered="#{usuario.admin}"> <ui:include src="PAGINA_ADMIN" /> </h:panelGrid> <h:panelGrid columns="1" rendered="#{usuario.usuario}"> <ui:include src="PAGINA_USUARIO" /> </h:panelGrid>

Boa noite Luis

Acho que a forma mais simples de vc conseguir restringir o usuário de acessar algumas páginas pela URL seria utilizando filtros. Da uma olhada nesse tópico: http://www.guj.com.br/java/236275-resolvidofuncionamento-do-servlet-filters

Me parece que o framework Spring Security já implementa este tipo de solução. Vale a pena estudá-lo.

Uma outra forma seria vc utilizar o PhaseListener do JSF para filtrar as requisições e conferir se o usuário tem acesso ou não, como descrito aqui: http://rodrigolazoti.com.br/2008/09/01/filtrando-usuarios-logados-em-jsf-com-phaselistener/

Até +!

Olá vinnysoft, eu já utilizo o phase para não deixar o usuário passar o link direto antes de logar,
estava pensando aqui talvez seja possivel eu verificar o perfil do usuário logado. E se o perfil do
usuário logado for igual a administrador eu não deixo ele passar a URL da pagina de perfil de usuario.

Vou tentar aqui. Qualquer coisa dando certo eu posto o codigo.

Valeus galera…

Então galera, estou tendo um pouco de dificuldade. Eu quero fazer da seguinte forma. Se meu usuário estiver logado e ele quiser alterar a URL eu quero submeter
ele para a página principal da aplicação. Então estou fazendo da seguinte forma.

LoginBean:

public boolean isUsuario(){ return perfilUsuario.getTipoUsuario() != null; }

E na minha classe Autorizador:

[code]public void afterPhase(PhaseEvent event) {

	FacesContext context = event.getFacesContext();
	
	if("/login.xhtml".equals(context.getViewRoot().getViewId())){
		return;
	}
	
	LoginBean loginBean = context.getApplication().evaluateExpressionGet
	(context, "#{loginBean}", LoginBean.class);
			
	if(!loginBean.isUsuario()){
		NavigationHandler handler = context.getApplication().getNavigationHandler();
		handler.handleNavigation(context, null, "login?faces-redirect=true");
		
		context.renderResponse();
	}
	
}[/code]

Se alguem souber também de uma forma que ao eu chamar as páginas não passe o xhtml dela na URL. Tipo em todo momento da aplicação o URL seria estatica.

[size=18]Gostaria que fica-se assim:[/size] localhost:8080/nome_projeto

[size=18]E não assim da forma que está atual:[/size] localhost:8080/nome_projeto/index.xhtml, localhost:8080/nome_projeto/produto.xhtml, localhost:8080/nome_projeto/cadastro.xhtml