Oi pessoal,
Sou novo aqui e comecei a lidar com java a fundo bem recentemente, mas estou encarando uma dificuldade tremenda no momento. Se puderem me ajudar, agradeceria muito!
Estou tentando implementar um sisteminha de login + Chat rústico, aonde usei o Spring Security para validar o login do usuário, e o JSF para fazer o chat. Agora estou precisando resgatar o usuário que realizou o “login” para que dessa forma eu possa mostrar seu nome no título de boas vindas do chat (o parâmetro, se estabelecido no login, precisa ser levado para outra janela. Pois é nela em que o chat vai abrir) e também preciso fixar esse usuário para quando for gravar as mensagens. Dessa maneira, o usuário não vai precisar ficar digitando seu nome a toda nova mensagem que enviar (estou usando somente uma tabela no mysql que grava as mensagens, com seu respectivo usuário, ID da mensagem, e, caso haja um direcionamento específico, o “para” da mensagem), e outra tabela somente para login de usuário.
Peguei alguns códigos que lidavam especificamente a biblioteca do spring e spring security, mas não as entendi muito bem.
Alguém poderia me dizer como posso resgatar esse usuário “perdido”?
Segue meu ManagerBean e o a página do chat:
ManagerBean das Mensagens:
package manager;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import persistence.MensagemDao;
import entity.Mensagem;
public class ManagerBeanMensagem {
private Mensagem mensagem;
private List <Mensagem> listamensagem;
public List<Mensagem> getListamensagem() {
try{
listamensagem= new MensagemDao().findAll();
}catch(Exception e){
}
return listamensagem;
}
public void setListamensagem(List<Mensagem> listamensagem) {
this.listamensagem = listamensagem;
}
public ManagerBeanMensagem() {
mensagem = new Mensagem();
}
public Mensagem getMensagem() {
return mensagem;
}
public void setMensagem(Mensagem mensagem) {
this.mensagem = mensagem;
}
public void cadastro(){
FacesContext fc = FacesContext.getCurrentInstance();
try{
MensagemDao d = new MensagemDao();
d.create(mensagem);
mensagem = new Mensagem();
fc.addMessage("form1", new FacesMessage("Dados gravados"));
}
catch(Exception e){
fc.addMessage("form1", new FacesMessage(e.getMessage()));
}
}
}
ManagerBean do usuário:
package manager;
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 entity.Usuario;
public class UsuarioController implements Serializable {
private static final long serialVersionUID = 1L;
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.setUsername(((User)authentication.getPrincipal()).getUsername());
}
}
}
public Usuario getUsuario() {
return usuario;
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
//Nada dentro desse comment deu certo
/**public String pegarUsuario(){
UsuarioController uc = new UsuarioController();
String usuario = uc.getUsuario().getNome();
return usuario;
}
public String teste(){
return usuario.getNome();
}
public Usuario teste2(){
Authentication authentication = (Authentication) SecurityContextHolder.getContext().getAuthentication();
if(authentication != null){
Object obj = authentication.getPrincipal();
if (obj instanceof Usuario){
return (Usuario) obj;
}
}
return usuario;
}**/
}
Página do Chat (Frame aonde preciso exibir o nome do usuário):
<%@page import="org.hibernate.transaction.TransactionFactory.Context"%>
<%@page import="com.sun.faces.facelets.el.ContextualCompositeMethodExpression"%>
<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
<%@ taglib prefix="rich" uri="http://richfaces.org/rich"%>
<f:view>
<h:form id="form1">
<rich:panel header="Bem vindo #{NOME_DO_USUARIO_LOGADO}">
<h:panelGrid columns="3">
<h:outputText value="Mensagem:"></h:outputText><h:outputText value="Para:"></h:outputText>
<p>
<h:inputTextarea rows="5" cols="60" value="#{ManagerBeanMensagem.mensagem.mensagem}"></h:inputTextarea>
<h:inputText value="#{ManagerBeanMensagem.mensagem.para}"></h:inputText>
<h:commandButton action="#{ManagerBeanMensagem.cadastro}" value="Enviar"></h:commandButton>
</h:panelGrid>
</rich:panel>
</h:form>
</f:view>
Desde já, agradeço!