Criando login com JSF

Olá,
Estou criando uma página de Login que contem um formulário para preencher o login e a senha do usuário.
O usuário preenche os dados de login e senha, e se estiver correto, vai transferi-lo para outra página, se não, uma página de erro.
Mas, porém, eu consigo acessar a página sem ter de fazer o login. Depois de muitas pesquisas, eu consigui achar a solução, utilizando filtros. Porém, sem sucesso.
Estou utilizando um jsf e suas tags. Quando invoco o metodo doFilter, simplesmente não faz nada.
Há alguma forma de fazer isso ?

Veja aqui um exemplo:

Java - Class

public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException{
		
		
		HttpServletRequest request = (HttpServletRequest) req;
		HttpServletResponse response = (HttpServletResponse) res;
		HttpSession session = request.getSession();
.....................................
....................		

Login XHTML

	<p:panel id="panel" header="Acesso ao sistema." style="border-radius:10px;">

		<p:messages id="msgs"/>
		
		<h:panelGrid columns="2" cellpadding="5">
			<h:outputLabel for="cnpj" value="CNPJ: " />
			<p:inputText id="cnpj" value="#{{loginFilter.CNPJ}" required="true" requiredMessage="Digite o CNPJ da empresa." label="cnpj"> </p:inputText>
			
			<h:outputLabel for="senha" value="Senha: *" />
			<p:password id="nonFeedback" required="true" requiredMessage="Digite a sua senha." value="#{{loginFilter.senha}" /> 

		</h:panelGrid>
		
		<p:commandButton value="Entrar" update="panel" 
				actionListener="#{loginFilter.doFilter" 
				id="btnGlobal" />
	</p:panel>
	
</h:form>
                    

Um jeito simples e elegante de fazer é com JSF é usando PhaseListener

Segue abaixo um exemplo

http://mowyourlawn.com/blog/?p=6

Cara,
O filtro deve interceptar todas as suas páginas que exigem autenticação.
Configure o web.xml:

&lt;filter&gt;
	&lt;filter-name&gt;filterName&lt;/filter-name&gt;
	&lt;filter-class&gt;br.com.blablabla.SeuFiltro&lt;/filter-class&gt;
&lt;/filter&gt;

&lt;filter-mapping&gt;
	&lt;filter-name&gt;filterName&lt;/filter-name&gt; //nome do filtro
	&lt;url-pattern&gt;*.*&lt;/url-pattern&gt; //as paginas que serão interceptadas
&lt;/filter-mapping&gt;

dentro do doFilter faça a verificação do login. Você pode direcionar para pagina de erro com

request.getRequestDispatcher(paginaExpiracao).forward(request, response);

continue o processo com

chain.doFilter(request, response);

estude sobre jaas, é mais interessante do que usar filtro.

Artigo interessante sobre o assunto: http://paulovittor23.org/2007/10/16/conhecendo-a-seguranca-declarativa-do-java-jaas-%E2%80%93-parte-1/

Eu estou estudando sobre o JAAS também tive um problema com o PhaseListener utilizando ajax do jsf2 + primefaces 3 e resolvi migrar.

Essa sua dica do JAAS também.

Abraçso!

JAAS com JBoss é muito bom e simples: Aplicação Web Completa JSF EJB JPA JAAS.
Aqui tem um exemplo de como utilizar Filter: Aplicação Web Completa Tomcat JSF Primefaces JPA Hibernate.

Por filter é mais fácil e portável. Por JAAS caso queira uma customização você terá que entender sobre como funciona os módulos de segurança, mas sua crianção e proteção são beeem simples.

Eu estou lendo este tópico do Uaihebert, sobre JAAS, muito bem explicado porém estou aplicando em Glassfish, utilizando um manual de um cara daqui do GUJ mesmo só não me recordo o nome agora.

Eu pretendo futuramente fazer uma especialização do método de autenticação pois pelo que entendi do JAAS ele para autenticação JDBC ele fica meio engessado podendo utilizar somente usuario e grupo e não podendo trocar o método de criptografia das senhas.

Mas para o inicio da aplicação já resolve o problema 100%, muito simples implantar!