JSF - Mostrar conteúdo apenas para admin com sessão ou outra coisa
14 respostas
C
cebolah
Olá caros membros.
Desculpe a perguntação mas é que na busca a fora eu só encontro pool de conexões mas não é o que procuro.
Teria como, em JSF, mostrar conteúdo apenas para admin com sessão ou outra coisa?
Em JSP fazemos aqueles chatos testes com if pra checar se a sessão está aberta, mas como faço, por exemplo, pra mostrar links de editar apenas para administradores ou até mesmo controlar sessões de algumas páginas?
O comun em JSF é você utilizar um PhaseListener, ele trabalha como um filtro.Dentro dessa classe você pode pegar o usuário da sessão e verificar se
ele é um usuário com permissão, leia sobre o assunto.
Obs.:É uma solução razoável para seu problema utilizar o PheseListner, embora tenha algumas coisas que você deve estudar futuramente
como perfis de usuários no container.
Maiquel
C
cebolah
Ok, vou pesquisar a respeito. Até já li sobre o assunto, mas foi quando não me interessava ainda.
Obrigado pela dica.
Também vou pesquisar sobre perfis de usuário no container.
grato pela sua colaboração amigo.
abraços.
C
cebolah
Já pesquisei bastante e encontrei uma solução sim, masera para diretórios completos, utilizando o Realm.
O que eu procurava também era como mostrar botões contendo
links para editar algum dado da página, mas isso apenas para o usuário autorizado.
Em JSP usamos sessões pra isso, e em JSF?
Agradeço a ajuda até agora.
M
MaiqueL
Eu sugiro você dividir em dois diretórios o que um administrador pode fazer em uma pasta e o que o usuário limitado pode fazer em outra pasta.
Mas tudo bem você quer outra solução :
altera a vizibilidade de determinado link ou botão enfim outro compoenente.
o atributo rendered define a visibilidade da inputtext então acho que aqui você já sacou a idéia.
Claro é isso mesmo com a sessão você vai usar um true ou false pra definir a vizibilidade da inputext ou qualquer coisa do genero.
C
cebolah
Sim, este eu conheço, graças a ajuda dos membros daqui.
O problema é que queria que o componente ficasse visível após o uauário autorizado fazer login,
poderia ser um admin ou algum editor, etc.
Se eu crio sessão no bean e depois redireciono, eu teria que pegar sessão como no JSP e isso também não quero.
Então como mostro componentes na tela apenas para usuários logados no sistema?
* PS: isso pode ocorrer na mesma página, pra poupar a criação de novas
páginas apenas pra editar uma tabela com banco de dados, por exemplo.
Não sei se é o correto mas após fazer o login redireciona corretamente.
Mas e a sessão neste caso?
M
MaiqueL
…
C
cebolah
MaiqueL:
Se você quer garantir que usuário está logado só poderá garantir com um Filter( acho que você conhece tbm é muito utilizado com servlets e JSP) ou um PheaseListner é a maneira mais fácil foi como eu comentei organizando por pastas e usar um desses dois caras.
Eu já estou utilizando para proteger diretórios inteiros, mas tá protegendo até quando eu faço o login correto.
Veja.
Quanto a retutilização de páginas só com rendered você pode definir se é visível ou não fora isso não vejo outra solução.
Pensei que o rendered só servia pra mostrar aquelas mensagens tipo: “campo requerido, login inválido”.
Obs.:Você pode adicionar dentro do bean um usuário. Sessão não é recomendado, mas é uma soluçao.
Eu procuro definir um bean como session e trabalhar com ele.
Eu teria que definir a bean como session pra isso? Mas ela já está como request, então se eu criar um conectionBean para a conexão e definir como session e deixar a outra bean request para os selects, delete, update , isso vai resolver?
C
cebolah
Eh, o PhaseListener não está configurado direito, não consigo acesso após submeter o login correto.
Mostra mensagem de erro: “HTTP Status 403 - Access to the requested resource has been denied”.
Desta maneira não acontece nada ao fazer o login corretamente.
Mas se eu modifico a linha [ Resource name=“jdbc/matrix” ] dá erro 403 - acesso negado.
Acho que não estou sabendo configurar o context.xml.
Alguma dica?
Obrigado!
D
dark123
Também estou interessado.
Ninguém?
D
dark123
Bom, eu consegui utilizar um Filter, só que ele só protege o diretório admin, seus sub-diretórios ficam expostos, mesmo eu configurando como a]/admin/*
publicclassFiltroSegurancaimplementsFilter{publicvoidinit(FilterConfigconfig)throwsServletException{}publicvoiddoFilter(ServletRequestreq,ServletResponseres,FilterChainchain)throwsIOException,ServletException{HttpSessionsession=((HttpServletRequest)req).getSession();Stringusuario=(String)session.getAttribute("logado");if(usuario==null){//session.setAttribute("msg","Você não está logado no sistema!");((HttpServletResponse)res).sendRedirect(".././");}else{chain.doFilter(req,res);}}publicvoiddestroy(){}
Bom, não queria utilizar filtro, mas parece que é a única maneira que está funcionando por aqui. :roll:
C
cebolah
Eu encontrei este link aqui que quase deu certo.
No faces-config, a tag dava um redirecionamento sem fim na aplicação.
Bom, foi o melhor exemplo de PhaseListener que eu já vi, pena que só funciona na teoria.
abraços.
C
cebolah
Resolvi. Contatei o admin dos blogs e eles acrescentaram a resposta lá no blog deles.
Então sugiro que visitem os links que já estão no tópico e quem tiver o mesmo problema encontratá a resposta.
Obrigado a todos. Foram de ótima ajuda.
até mais.
D
dark123
Mas tem um porém nisso tudo.
Como configuro pra um usuário logado acessar apenas seus diretórios.
Eu me loguei como editor e acessei os arquivos de um administrador da aplicação.
Ainda tem o problema que as vezes ao realizar o login corretamente sou redirecionado à página de login novamente, só que mostra erro, pois tenta redirecionar pra dentro de um diretório onde não existe esta página.
veja: web.xml
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ --><!-- Configuração da autenticação e autorização. --><!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ --><security-constraint><display-name>ÁreadeEdição</display-name><web-resource-collection><web-resource-name>Arquivosprotegidosporlogin</web-resource-name><url-pattern>/editor/*</url-pattern></web-resource-collection><auth-constraint><role-name>systemuserEditor</role-name></auth-constraint><display-name>ÁreadeAdministração</display-name><web-resource-collection><web-resource-name>Arquivosprotegidosporlogin</web-resource-name><url-pattern>/admin/*</url-pattern></web-resource-collection><auth-constraint><role-name>systemuserAdmin</role-name></auth-constraint></security-constraint><login-config><auth-method>FORM</auth-method><realm-name>StripesSecRealm</realm-name><form-login-config><form-login-page>/login.jsp</form-login-page><form-error-page>/error.jsp</form-error-page></form-login-config></login-config><security-role><role-name>systemuserEditor</role-name><role-name>systemuserAdmin</role-name></security-role>