Bloquear 'usuario informar url'

4 respostas
L

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.

4 Respostas

H

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>

V

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é +!

L

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…

L

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:

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();
		}
		
	}

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

Criado 9 de abril de 2012
Ultima resposta 10 de abr. de 2012
Respostas 4
Participantes 3