Criando login com JSF

7 respostas
H

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>

7 Respostas

S

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

Segue abaixo um exemplo

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

G

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);
G

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

G

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

S

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!

H

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.

S

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!

Criado 20 de junho de 2012
Ultima resposta 23 de jun. de 2012
Respostas 7
Participantes 5