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