Bom dia, estou implementando uma tela de login com JSF e Spring Security 5, e estou com um problema na validação de mensagens quando o usuário digita usuário ou senha inválidos.
Ao clicar no botão logar o método loadUserByUsername é chamado:
public class UsuarioSistemaService implements UserDetailsService {
@Override
public UserDetails loadUserByUsername(final String login) throws UsernameNotFoundException {
msgFeedback(null, mensagem, severity);
}
}
public void msgFeedback(String tagIdent, String mensagem, Severity severity) {
FacesMessage facesMessage = new FacesMessage(severity, mensagem, mensagem);
FacesContext facesContext = FacesContext.getCurrentInstance();
facesContext.addMessage(tagIdent, facesMessage);
FacesContext.getCurrentInstance().getExternalContext().getFlash().setKeepMessages(true);
}
o problema ocorre quando eu tento enviar uma mensagem de usuário ou senha inválidos para a tela, o facesContext sempre vem null.
Eu tenho o seguinte PhaseListener na minha aplicação e configurado no faces-config.xml,
mas mesmo assim não funciona, como posso resolver esse problema?
public class PhaseListener implements PhaseListener {
private static final long serialVersionUID = -3155148099818905433L;
@Override
public void afterPhase(PhaseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void beforePhase(PhaseEvent event) {
FacesContext context = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) context.getExternalContext().getSession(false);
if (session != null) {
String mensagem = (String) session.getAttribute("msg");
if (mensagem != null) {
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, mensagem, null));
session.setAttribute("msg", null);
}
}
}
@Override
public PhaseId getPhaseId() {
return PhaseId.RESTORE_VIEW;
}
}