Pessoal Tenho uma aplicação em jsf 2 e Dao com autenticação via Spring security igual a este tutorial : http://jamacedo.com/2011/01/crud-jsf-2-parte-3-seguna-com-spring-security-3/ . só que com DAo , mas assim não tenho muito controle do usuário que logou no sistema, pois ele está no banco de dados usado pelo spring, Como faço pra pegar o nome do usuário atual da sessão que logou no página de login do spring ??? Algúem ???
Desde já Obrigado!
Pegar login do usuário Atual da sessão do Spring security com jsf 2. [RESOLVIDO]
8 Respostas
Boa tarde.
Após a autenticação do usuário para pegar o seu username:
((SecurityContext) SecurityContextHolder.getContext()).getAuthentication().getName()
[]'s
t++
Crie um ManagedBean da seguinte forma
import java.io.Serializable;
import java.io.Serializable;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.User;
import com.suporte.model.Usuario;
public class UsuarioController implements Serializable {
private Usuario usuario;
public UsuarioController(){
usuario = new Usuario();
SecurityContext context = SecurityContextHolder.getContext();
if(context instanceof SecurityContext)
{
Authentication authentication = context.getAuthentication();
if(authentication instanceof Authentication)
{
usuario.setLogin(((User)authentication.getPrincipal()).getUsername());
}
}
}
public Usuario getUsuario() {
return usuario;
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
}
Após isso, basta instanciar um objeto da seguinte forma
UsuarioControler uc = new UsuarioControler();
String usuario = uc.getUsuario().getLogin();
Se der certo ou não posta ai!
Charles fiz da forma que falou e deu o seguinte erro. : /admin/sec/cadnoticia.xhtml @17,63 value="#{noticiaBean.nomesessao}": Property ‘nomesessao’ not found on type br.com.controller.NoticiasBean . o que poderá ser ???
tiagoamx, se possível post o código para avaliarmos melhor mas vc pode criar um controller como o jonatex fez q deve dar certo tb.
tentando adivinhar; teu erro pode ser pq vc criates um método tipo getX() no teu bean NoticiasBean.java:
public String getNomessesao()
{
return (((SecurityContext) SecurityContextHolder.getContext()).getAuthentication().getName())
}
[]'s
t++
public String getLoginUsuario() {
UserLogado user = (UserLogado) SecurityContextHolder.getContext()
.getAuthentication().getPrincipal();
return user.getUsername().toString();
}
criei a classe User logado extends de User do org.springframework.security.core.userdetails.User, fiz isso porque precisava de mais informaçõe do usuário da sessão como Nome Completo e uma lista dos acessos dele;
Pessol Consegui resolver ! muito fácil da forma que o jonatex explicou … Valew pessoal problema resolvido
Abração.
Precisando estamos ai :D.
Por gentileza, coloca [RESOLVIDO] no título do post.
Abrass!
galera desculpa meio que "desenterrar" o tópico.. é que estou um pouco desesperado rsrs.. to com um problema e não consigo resolver
eu tenho uma aplicação usando jsf, spring security, etc... tudo funcionando certinho
meu index nao tem validação pra acessar... qualquer um pode acessar...
somente o /usuario/** tem que ser ROLE_USER
no meu /index.xhtml eu tenho 2 painel assim:
painel1- "olá, clique aqui e registre-se ou faça login"
ou
painel2 - "olá alan | minhas informações | sair"
ou seja um se o usuário não estiver logado... e o outro se o usuário estiver logado...
no meu xhtml eu usei o seguinte código:<section id="login">
<h:panelGroup rendered="???">
<div id="off">
<div id="fotoUser">
<h:graphicImage value="/img/userOff.jpg" width="40" height="40" title="Visitante" alt="Visitante"/>
</div>
<div class="alinhaTextoUser">
<div class="saudacaoUser">
Beleza<h:outputText styleClass="saudacaoNegrito" value=" Visitante?"/><br/>
Faça seu <h:outputLink value="/usuario/meu-cadastro.xhtml">login</h:outputLink> ou <h:outputLink value="/cadastro.xhtml">cadastre-se</h:outputLink>
</div>
</div>
</div>
</h:panelGroup>
<h:panelGroup rendered="#{facesContext.externalContext.isUserInRole('ROLE_USER')}">
<div id="logado">
<div id="fotoUser">
<h:graphicImage value="/img/userOn.jpg" width="40" height="40" title="Flechada" alt="Flechada"/>
</div>
<div class="alinhaTextoUser">
<div class="saudacaoUser">
E aí<h:outputText styleClass="saudacaoNegrito" value=" Flechada"/>, beleza?<br/>
<h:outputLink value="#">Meu Espaço</h:outputLink> | <h:outputLink value="#">Favoritos</h:outputLink> | <h:outputLink style="color: #cc6666;" value="#">Sair</h:outputLink>
</div>
</div>
</div>
</h:panelGroup>
</section>
o painel2 pra mostra as informações do usuário está certo
porém no painel1 onde eu tenho "???" eu nao sei oq por..
ja tentei ! or not empty de quase-tudo e nao vai :(