estou fazendo uma aplicação web com spring security.. ta funcionando certinho e eu tenho duas roles; ROLE_USER e ROLE_ADMIN
e eu tenho na página 2 div's uma eu vou exibir se o usuário estiver logado... e a outra se o usuário estiver deslogado..
então eu tenho o seguinte código:
<sectionid="login"><h:panelGroup><divid="off"><divid="fotoUser"><h:graphicImagevalue="/img/userOff.jpg"width="40"height="40"title="Visitante"alt="Visitante"/></div><divclass="alinhaTextoUser"><divclass="saudacaoUser">Beleza<h:outputTextstyleClass="saudacaoNegrito"value=" Visitante?"/><br/>Façaseu<h:outputLinkvalue="/usuario/meu-cadastro.xhtml">login</h:outputLink>ou<h:outputLinkvalue="/cadastro.xhtml">cadastre-se</h:outputLink></div></div></div></h:panelGroup><h:panelGrouprendered="#{facesContext.externalContext.isUserInRole('ROLE_ADMIN') or facesContext.externalContext.isUserInRole('ROLE_USER')}"><divid="logado"><divid="fotoUser"><h:graphicImagevalue="/img/userOn.jpg"width="40"height="40"title="Flechada"alt="Flechada"/></div><divclass="alinhaTextoUser"><divclass="saudacaoUser">Eaí<h:outputTextstyleClass="saudacaoNegrito"value=" Flechada"/>,beleza?<br/><h:outputLinkvalue="#">MeuEspaço</h:outputLink>|<h:outputLinkvalue="#">Favoritos</h:outputLink>|<h:outputLinkstyle="color: #cc6666;"value="#">Sair</h:outputLink></div></div></div></h:panelGroup></section>
a segunda div que tem:
ta funcionando normal... se o usuário ta logado em alguma role ele aparece...
o problema é que eu não consigo esconder a outra div se o usuário estiver logado... ai fica aparecendo as duas.. :(
ja tentei fazer a mesma coisa da segunda e colocando ! ficando +ou-... #{!facesCont...} mais num deu certo...
Se vc olhar a mensagem de erro ele ta tentando converter uma String para java.lang.String cannot be cast to org.springframework.security.core.userdetails.User
Oq vc tem nessa linha?
br.com.techsquare.controller.UsuarioController.(UsuarioController.java:31)
A
alandiniz
então eu não sei o que tem de errado com meu UsuarioController;
packagebr.com.techsquare.controller;importbr.com.techsquare.dao.UsuarioDAO;importbr.com.techsquare.dao.UsuarioDAOImp;importbr.com.techsquare.modelo.Usuario;importjavax.faces.bean.ManagedBean;importjavax.faces.bean.SessionScoped;importjava.util.List;importorg.springframework.security.core.Authentication;importorg.springframework.security.core.context.SecurityContext;importorg.springframework.security.core.context.SecurityContextHolder;importorg.springframework.security.core.userdetails.User;/** * * @author alan */@ManagedBean@SessionScopedpublicclassUsuarioController{privateUsuariousuario;privateList<Usuario>usuarios;publicUsuarioController(){usuario=newUsuario();SecurityContextcontext=SecurityContextHolder.getContext();if(contextinstanceofSecurityContext){Authenticationauthentication=context.getAuthentication();if(authenticationinstanceofAuthentication){usuario.setUsername(((User)authentication.getPrincipal()).getUsername());//nessa linha de cima da erro, nao sei pq.... + ela funciona normal quando eu logo e talz..}}}//e quando eu chamo o metodo estalogado eu nao tenho nenhum casting..publicbooleanestaLogado(){SecurityContextcontext=SecurityContextHolder.getContext();if(contextinstanceofSecurityContext){Authenticationauthentication=context.getAuthentication();if(authenticationinstanceofAuthentication){returntrue;}else{returnfalse;}}else{returnfalse;}}}
H
Hebert_Coelho
Isso aqui: usuario.setUsername(((User)authentication.getPrincipal()).getUsername());
Troque para usuario.setUsername(authentication.getPrincipal());
Eu saco nada de spring, mas sei que o erro tá aí! =P
A
alandiniz
jakefrog:
Isso aqui: usuario.setUsername(((User)authentication.getPrincipal()).getUsername());
Troque para usuario.setUsername(authentication.getPrincipal());
Eu saco nada de spring, mas sei que o erro tá aí! =P
intão, tentei faze isso já rsrs…tentei altera pra (Usuario) o casting… mais da erro…
se eu faço esse jeito ai aparece a lampadinha falando pra min criar um método assim:
“Criar método setUsername(java.lang.Object) em pacote.modelo.Usuario”
H
Hebert_Coelho
Oq isso aqui retorna? authentication.getPrincipal()
E como esta seu setUserName?
Posta tudo não, só isso aí.
A
alandiniz
isso ak é pra depois que o cara loga pega o nome dele: usuario.setUsername(((User)authentication.getPrincipal()).getUsername());
o problema é o seguinte…
o spring pra autentica nao usa nenhuma classe java, (de modo indireto) eu nao preciso criar nada…
essa classe UsuarioController é apenas pra min pega o nome dele…
se eu tentar instanciar a UsuarioController sem estar logado da erro!
por isso esse código funciona: rendered="#{facesContext.externalContext.isUserInRole(‘ROLE_ADMIN’) or facesContext.externalContext.isUserInRole(‘ROLE_USER’)}"
agora eu precisava do inverso disso ai… + nao da certo colocar !, or, not, empty, null,
A
alandiniz
tem um esquema de <sac: mais num consigo faze funfa… e eu tenho a lib e o xmlns certinho!
<h:outputText value="Lorem ipsum dolor sit amet" rendered="#{sec:areAllGranted('ROLE_FOO, ROLE_BAR')}"/>
ai dava pra min opor !sec
H
Hebert_Coelho
Cara, vou voltar ao erro: String para java.lang.String cannot be cast to org.springframework.security.core.userdetails.User
Tenta fazer isso aqui String nome = (String) authentication.getPrincipal();
usuario.setUserName(nome);.
Foi por isso q eu te perguntei oq um método retorna e o q o outro aceita.
A
alandiniz
quando eu inicio o projeto e faço login, em nenhum momento eu chamo a UsuarioController…
o spring security nao precisa dele…