23 onde ele da o return com os dados do usuario, no caso das regras sao aqueles ROLE_ADM, ROLE_USER.... isso e necessario para o applicationContext.xml saber se deve liberar a pagina ou nao, veremos mais pra frente isso, o que voce precisa saber e que, dependendo a logica que voce utilizar para montar a estrutura do BD, sera possivel que um usuario pertenca a diferentes filiais com diferentes regras para cada uma, mas ai teria que fazer uma tabela N-N, o que prologaria ainda mais essa postagem que ja vai ficar enorme. So mais um detalhe antes de continuar, na linha 21, nos jogamos o usuario para a sessao da aplicacao, assim podemos recuperar ele a qualquer momento. Continuando, se no primeiro metodo ocorrer o return ele vai para o metodo de sucesso (successfulAuthentication), onde eu digo para o Spring Security que ha uma autenticacao e redireciono o usuario para a pagina inicial. No caso de nao ocorrer um return, por dados incorretos, pelo usuario nao ter acesso a empresa, automaticamente caira no metodo unsuccessfulAuthentication, onde eu redireciono ele para a pagina de login novamente.Vamos a uma observacao nessa classe: percebam que eu tenho uma String mensagem, pois bem, ela nao seria necessaria se caso nao quisesse mostrar ao usuario os avisos de dados incorretos e outros... entao eu coloco essa String na sessao da aplicacao, e recupero por uma outra classe que e a AutenticacaoPhaseListener.java, que se encontra no pacote javasemcafe.controller. public class AutenticacaoPhaseListener implements PhaseListener { @Override public void afterPhase(PhaseEvent event) { //nao implementado } @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_INFO, mensagem, null)); session.setAttribute("msg", null); } } } @Override public PhaseId getPhaseId() { return PhaseId.RESTORE_VIEW; }}Esta classe implementa um PhaseListener que vai pegar a mensagem na sessao da aplicacao e vai manda-la por por um FacesMessage para o JSF.Utilizando a classe UsuarioBean.java, do pacote javasemcafe.controller(esta classe nao esta aparecendo na imagem da estrutura do projeto, mas deve estar no projeto), vamos pegar o usuario na sessao:@ManagedBean@ViewScopedpublic class UsuarioBean { private Usuario usuarioLogado; public Usuario getUsuario() { FacesContext context = FacesContext.getCurrentInstance(); HttpSession session = (HttpSession) context.getExternalContext().getSession(false); usuarioLogado = (Usuario) session.getAttribute("usuarioLogado"); return usuarioLogado; } public void setUsuario(Usuario usuario) { this.usuarioLogado = usuario; }}Veja que e utilizado o atributo "usuarioLogado" que foi setado la na classe AutenticacaoFilter.java, e atraves dela que conseguimos pegar esse usuario. Ou voce pode estar pegando o usuario diretamente do Spring Security, porem neste caso ele nao te tras muitas informacoes de usuario, mas sei que o login e uma delas, veja um exemplo (isto nao esta no projeto, e apenas uma outra forma de um outro projeto meu): public ConfiguracaoBean() { Authentication authentication = (Authentication) SecurityContextHolder.getContext().getAuthentication(); if (authentication != null) { usuario = authentication.getName(); }}Agora vamos para as paginas do JSF, comecando pela index.xhtml (tambem conhecida: index.jsf) que sera a pagina para onde o usuario sera redirecionado se logar o sistema:<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html"> <h:head> <title>Facelet Title</title> </h:head> <h:body> <h:outputText value="Ola #{usuarioBean.usuario.login}!"/><br/>