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 experiência em tecnologia, atuo como Engenheiro de Computação, desenvolvedor de sistemas, escritor e produtor de conteúdo. Minha trajetória passa pelo ensino técnico, desenvolvimento web, arquitetura de sistemas e criação de soluções voltadas para a indústria de jogos digitais. Acredito que conhecimento deve ser acessível e aplicável. Essa visão resultou em uma biblioteca com mais de 550 artigos gratuitos, abrangendo temas como desenvolvimento web, infraestrutura, inteligência artificial, Game Design, mercado de jogos e carreiras na indústria de games. Sou autor do livro "GDD – O Guia Definitivo", uma obra dedicada ao planejamento e documentação de jogos digitais, e criador do GameMeTRix, uma plataforma que auxilia desenvolvedores na análise e validação de ideias para jogos. Meu trabalho busca conectar planejamento, tecnologia e mercado para ajudar criadores a transformar boas ideias em projetos viáveis. Atualmente concentro meus estudos e projetos no desenvolvimento de jogos web, na criação de metodologias para validação de produtos digitais e na produção de conteúdo técnico voltado ao ecossistema de jogos. Meu compromisso é unir teoria, prática e experiência de mercado para contribuir com o crescimento de novos desenvolvedores e profissionais da área.