Middlewares no Laravel

Laravel
Tempo de leitura: 4 minutos

Middlewares no Laravel: No Laravel 12, os Middlewares são o mecanismo essencial para interceptar e processar requisições HTTP antes que elas cheguem à sua lógica de negócio (os Controllers). Eles agem como uma “camada intermediária” onde você pode inspecionar a requisição, adicionar cabeçalhos, realizar verificações de segurança ou redirecionar o usuário.

Entender a arquitetura de Middleware é crucial para implementar funcionalidades como autenticação, autorização e logging de forma limpa e modular.

1. 💡 O Conceito de Middleware

Imagine um Middleware como uma série de filtros em um funil ou uma série de porteiros em um clube. Cada porteiro tem uma função específica (verificar idade, checar lista de convidados, inspecionar bagagens). Se a requisição passar por todos os filtros, ela chega ao destino.

  • Inspeção: O Middleware recebe o objeto Request.
  • Decisão: Ele pode modificar a requisição ou verificar uma condição.
  • Ação: Se a condição falhar, ele interrompe o fluxo e retorna uma resposta (ex: erro 403, redirecionamento para login). Se for aprovado, ele passa a requisição para o próximo elemento.

2. 🛠️ Criando um Middleware Customizado

Para criar um novo Middleware, usamos o comando Artisan:

Bash

php artisan make:middleware CheckUserStatus
# Cria o arquivo em app/Http/Middleware/CheckUserStatus.php

Estrutura do Método handle()

O coração do Middleware é o método handle(), que recebe a requisição ($request) e um closure ($next).

PHP

<?php
// app/Http/Middleware/CheckUserStatus.php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;

class CheckUserStatus
{
    public function handle(Request $request, Closure $next): Response
    {
        // 1. Lógica de PRÉ-PROCESSAMENTO:
        // Exemplo: Se o usuário estiver desativado, proibir o acesso.
        if (auth()->check() && !auth()->user()->is_active) {
            auth()->logout(); // Força o logout
            return redirect('/login')->with('error', 'Sua conta está inativa.');
        }

        // 2. Passa a requisição para o próximo Middleware/Controller:
        $response = $next($request);

        // 3. Lógica de PÓS-PROCESSAMENTO (Executada após o Controller):
        // Exemplo: Adicionar um header de segurança na resposta.
        $response->headers->set('X-Content-Type-Options', 'nosniff');
        
        return $response;
    }
}

3. 🧩 Registro e Atribuição de Middlewares

Para que o Laravel reconheça e utilize seu Middleware, ele precisa ser registrado no Kernel HTTP.

A. Registro no Kernel HTTP (Laravel 12)

No Laravel 12, a configuração de Middleware está centralizada no arquivo bootstrap/app.php, dentro da instância da aplicação, em vez do arquivo App/Http/Kernel.php das versões anteriores (Laravel 10 para trás).

Você deve mapear seu Middleware para um nome curto (uma chave) na configuração:

PHP

// bootstrap/app.php (trecho conceitual de registro)
return Application::configure(basePath: dirname(__DIR__))
    // ...
    ->withMiddleware(function (Middleware $middleware) {
        // Registro de Middlewares de Rota:
        $middleware->alias([
            'auth' => \App\Http\Middleware\Authenticate::class,
            'is.admin' => \App\Http\Middleware\IsAdmin::class, // Seu middleware
        ]);
        
        // Registro de Middlewares Web Globais ou de API
        // ...
    })
    // ...

B. Atribuição a Rotas

Você pode atribuir Middlewares individualmente, em grupos ou a Controllers de recurso.

1. Atribuição por Rota Individual

PHP

// routes/web.php
// Acesso a esta rota requer autenticação ('auth') e permissão de admin ('is.admin')
Route::get('/admin/painel', [AdminController::class, 'index'])
     ->middleware(['auth', 'is.admin']);

2. Agrupamento de Rotas

Aplique Middlewares a um conjunto de rotas relacionadas:

PHP

// routes/web.php
Route::middleware(['auth', 'is.admin'])->group(function () {
    // Rotas onde 'auth' e 'is.admin' serão executados automaticamente
    Route::get('/admin/users', [UserController::class, 'index']);
    Route::post('/admin/create', [UserController::class, 'store']);
});

3. Em um Controller (Método __construct)

Para aplicar um Middleware a todos ou apenas a certos métodos de um Controller.

PHP

<?php
class PostController extends Controller
{
    public function __construct()
    {
        // Aplica o middleware 'auth' a todos os métodos deste Controller
        $this->middleware('auth');

        // Aplica 'is.admin' APENAS aos métodos 'store' e 'update'
        $this->middleware('is.admin')->only(['store', 'update']);
    }
    // ...
}

4. 🔗 Middlewares Built-in Comuns

O Laravel já oferece uma série de Middlewares essenciais prontos para uso:

MiddlewarePropósitoGrupo Padrão
webDefine recursos necessários para aplicações web (sessão, cookies, proteção CSRF).Aplicado por padrão em routes/web.php.
apiDefine recursos para APIs (sem sessão, rate limiting configurado).Aplicado por padrão em routes/api.php.
authVerifica se o usuário está autenticado.Usado em rotas específicas.
throttleLimita o número de requisições que um usuário pode fazer por período (rate limiting).Usado no grupo api por padrão.

✅ Conclusão Middlewares no Laravel

Middlewares no Laravel 12: Os Middlewares são ferramentas de controle de fluxo que protegem e filtram as requisições HTTP antes que elas cheguem à sua aplicação. Seja para verificar a autenticação, a autorização ou para adicionar headers de segurança na resposta, eles permitem implementar lógica de forma modular, mantendo seus Controllers focados puramente na lógica de negócio, essencial para a escalabilidade e segurança do seu projeto.

Mas antes de dominar o Laravel, se for o seu caso, toda jornada tem um início. Vamos entender quais são os conhecimentos básicos necessários para aproveitar ao máximo este poderoso framework. Para iniciar seus estudos no Laravel, você precisará dominar as seguintes tecnologias:

HTML
HTML
CSS
CSS
Javascript
JavaScript
SQL
SQL
Capa Curso PHP
PHP

E se você gosta do nosso conteúdo, não deixe de contribuir adquirindo os serviços e produtos dos nossos apoiadores e empresas que somos associados:

Hospedagem Hostinger
Ofertas Amazon
Amazon Prime
Author: Thiago Rossi
Com mais de 20 anos de jornada na tecnologia, minha trajetória evoluiu do ensino técnico à arquitetura de sistemas complexos. Hoje, foco minha expertise no desenvolvimento de soluções de Inteligência Artificial nativa e análise de dados públicos, utilizando o ecossistema PHP para transformar dados brutos em transparência e eficiência. Como autor e desenvolvedor, acredito na democratização do conhecimento. Essa visão resultou em uma biblioteca de mais de 530 artigos gratuitos, cobrindo desde a base do WebDev e Infraestrutura até os bastidores da indústria de Jogos e IA. No universo de Game Design, sou autor do livro "GDD – O Guia Definitivo" e documento ativamente meus processos através de DevLogs, unindo rigor técnico e criatividade em projetos desenvolvidos com GDevelop 5. Meu compromisso é conectar engenharia de ponta com as reais oportunidades do mercado de tecnologia.