Tutorial Mentawai #3 – Autenticação

Padrão

Olá pessoal! Tudo certo?

No último post sobre o Mentawai, tivemos uma visão geral sobre Filtros, que basicamente são ações executadas sobre o conteúdo da input ou output, antes ou depois da execução de uma Action. A partir do uso de filtros giram praticamente todas as funcionalidades do framework.

No tutorial de hoje, vamos ver como funciona o controle de autenticação no Mentawai. A autenticação consiste em evitar o acesso de usuários não autenticados (que não realizaram um login, por exemplo). Vocês verão que este processo de controle é extremamente simples de se fazer com o Mentawai.

Primeiramente, precisamos criar uma action de login. Em vez de estender BaseAction, esta action deve estender BaseLoginAction.

package net.rafaeltoledo.mentawai.controller.action;

import org.mentawai.action.BaseLoginAction;

public class LoginAction extends BaseLoginAction {

	@Override
	public String execute() throws Exception {

		String email = input.getString("email");
		String senha = input.getString("senha");

		// Aqui você pode realizar a sua consulta ao banco
		if (!"admin@rafaeltoledo.net".equals(email) || !"admin".equals(senha)) {
			return ERROR;
		}

		setUserSession(email);

		return SUCCESS;
	}
}

O lance dessa action é o método setUserSession() que deve ser chamado para iniciar a sessão de um usuário. Usuários sem uma sessão criada serão bloqueados pelo AuthenticationFilter que veremos logo a seguir.

Agora, precisamos adicionar um filtro no ApplicationManager que definirá opções de redirecionamento e alguns detalhes a mais:

package net.rafaeltoledo.mentawai.controller;

import net.rafaeltoledo.mentawai.controller.action.LoginAction;

import org.mentawai.core.ActionConfig;
import org.mentawai.core.Forward;
import org.mentawai.core.Redirect;
import org.mentawai.filter.AuthenticationFilter;

public class ApplicationManager extends org.mentawai.core.ApplicationManager {

	@Override
	public void loadActions() {
		addGlobalFilter(new AuthenticationFilter());
		addGlobalConsequence(AuthenticationFilter.LOGIN, new Redirect("/login.jsp"));

		ActionConfig ac = new ActionConfig("Login", LoginAction.class);
		ac.addConsequence(LoginAction.SUCCESS, new Redirect("/home.jsp"));
		ac.addConsequence(LoginAction.ERROR, new Forward("/login.jsp"));
		addActionConfig(ac);
	}
}

Perceba que adicionamos um filtro global, o AuthenticationFilter. É ele o responsável por tratar o bloqueio das páginas por usuários não autenticados. Além disso definimos uma consequência global, indicando para onde o usuário será redirecionado caso tente acessar alguma página protegida sem estar autenticado (no caso, redirecionamos para a página de login).

Além disso, configuramos a action de Login, definindo um redirecionamento para a home (login com sucesso) ou pra páginda de login (login sem sucesso). E qual a diferença entre o Redirect e o Forward? Enquanto o Redirect simplesmente redireciona para outra página ou action, o Forward redireciona mantendo os dados na saída, realizando um processamento prévio da página. Ele é útil, por exemplo, para exibirmos mensagens de aviso ao usuário (coisa que veremos em muito breve!).

Continuando nosso tutorial, assim como implementamos o login, precisamos implementar o Logout. Como o logout realiza praticamente a mesma tarefa em todas as aplicações, o Mentawai já fornece uma implementação pronta que pode ser utilizada. Caso você tenha dados específicos que necessitem tratamento, você pode criar a sua implementação, tomando como base o exemplo da documentação oficial. Então, basta configurarmos no ApplicationManager.

ac = new ActionConfig("Logout", LogoutAction.class);
ac.addConsequence(LogoutAction.SUCCESS, new Redirect("/home.jsp"));
addActionConfig(ac);

Ok… já vimos como funciona toda essa parte de configuração… mas como eu projeto a minha página? Através de uma única tag!

<%@ taglib uri="http://www.mentaframework.org/tags-mtw/" prefix="mtw" %>
<mtw:requiresAuthentication />
<html>
<body>
<h1>O usuário só verá esta página se estiver autenticado!</h1>
</body>
</html>

Na configuração atual que temos, caso o usuário tente acessar uma página protegida, ele será redirecionado para a página de login e, caso o login seja realizado com sucesso, ele é redirecionado para a home. Em alguns casos, seria interessante que, após o login, ele fosse redirecionado de volta para a página que estava tentando acessar. Para isso, podemos adicionar um filtro na configuração da action de login para fazer esse trabalho pra gente.

ActionConfig ac = new ActionConfig("Login", LoginAction.class);
ac.addConsequence(LoginAction.SUCCESS, new Redirect("/home.jsp"));
ac.addConsequence(LoginAction.ERROR, new Forward("/login.jsp"));
addActionConfig(ac);

ac.addFilter(new RedirectAfterLoginFilter());
ac.addConsequence(RedirectAfterLoginFilter.REDIR, new Redirect());

E depois, basta adicionar  a opção redir=”true” na tag mtw:requiresAuthentication.

<%@ taglib uri="http://www.mentaframework.org/tags-mtw/" prefix="mtw" %>
<mtw:requiresAuthentication redir="true" />
<html>
<body>
<h1>Após a autenticação, o usuário volta pra cá!</h1>
</body>
</html>

Então… é isso pessoal! No próximo tutorial, veremos como implementar um sistema de autorização com o Mentawai. Até lá! 😀

Deixe uma resposta