Middleware là gì? Tầm quan trọng của middleware trong backend

Trong quá trình phát triển ứng dụng web, việc xử lý yêu cầu từ người dùng và trả về phản hồi một cách hiệu quả, bảo mật luôn là một trong những yếu tố quan trọng. Để làm được điều này, các lập trình viên thường sử dụng middleware — một công cụ giúp tối ưu hóa và quản lý các quy trình giữa client và server. Trong bài viết này,hãy cùng LPTech tìm hiểu middleware là gì và đặc biệt là cách middleware hoạt động trong Laravel nhé!

Middleware là gì?

Middleware là những đoạn mã trung gian nằm trong các ứng dụng web sử dụng mô hình client-server. Trong đó, middleware sẽ nhận yêu cầu (request) từ người dùng và sau đó phản hồi (response) luôn hoặc chuyển sang cho middleware khác. Các framework như Laravel, Express.js (Node.js), Django (Python) đều cung cấp các công cụ hỗ trợ middleware để giúp thực hiện những tác vụ như này qua đó giúp việc thiết kế website trở nên dễ dàng hơn.

Middleware sử dụng khi nào?

Middleware có thể được sử dụng trong rất nhiều trường hợp khác nhau trong quá trình phát triển ứng dụng như: Xác thực người dùng (Authentication), phân quyền (Authorization), bảo mật (Security), ghi nhật ký (Logging), xử lý lỗi (Error handling) và nén dữ liệu (Data compression).

Middleware rất quan trọng trong việc xây dựng các ứng dụng web bởi nó cung cấp một cơ chế để xử lý các yêu cầu HTTP một cách hiệu quả và bảo mật. Middleware có thể kiểm tra xem người dùng đã đăng nhập hay chưa. Nếu chưa đăng nhập, middleware có thể chuyển hướng người dùng đến trang đăng nhập hoặc thông báo lỗi.

Bên cạnh đó, nó cũng giúp xác định người dùng có quyền truy cập vào một tài nguyên nhất định hay không. Middleware có thể giúp bảo vệ ứng dụng khỏi các mối đe dọa bảo mật bằng cách kiểm tra các yêu cầu từ người dùng trước khi chúng đi vào hệ thống.

Middleware trong Laravel là gì?

Middleware trong Laravel giúp bạn xử lý yêu cầu HTTP trước khi đến với controller hoặc sau khi phản hồi được trả về từ controller. Trong Laravel, middleware cho phép bạn dễ dàng kiểm tra và xử lý các tác vụ như xác thực người dùng, bảo mật và phân quyền.

> Tìm hiểu thêm về Laravel tại:Laravel là gì? Tại sao Laravel là PHP Framework tốt nhất năm 2025?

Ví dụ về middleware trong Laravel

Giả sử bạn đang phát triển một ứng dụng cần kiểm tra xem người dùng đã đăng nhập hay chưa trước khi truy cập vào một trang nhất định. Bạn có thể sử dụng middleware trong Laravel để thực hiện điều này. Cách tiến hành cụ thể như sau:

Tạo Middleware

Để tạo middleware trong Laravel, bạn có thể sử dụng lệnh Artisan:

php artisan make:middleware CheckIfAuthenticated

Cấu hình Middleware

Sau khi tạo middleware, bạn sẽ thấy một file mới được tạo tại app/Http/Middleware/CheckIfAuthenticated.php. Trong file này, bạn có thể viết mã để kiểm tra xem người dùng đã đăng nhập chưa.

namespace App\Http\Middleware;

use Closure;

use Illuminate\Http\Request;

class CheckIfAuthenticated

{

public function handle(Request $request, Closure $next)

{

// Kiểm tra xem người dùng có đăng nhập hay chưa

if (!auth()->check()) {

// Nếu chưa đăng nhập, chuyển hướng đến trang login

return redirect('login');

}

return $next($request);

}

}

Đăng ký Middleware

Sau khi tạo xong middleware, bạn cần đăng ký nó trong file app/Http/Kernel.php để Laravel biết sử dụng nó:

protected $routeMiddleware = [

'auth' => \App\Http\Middleware\CheckIfAuthenticated::class,

];

Áp dụng Middleware

Cuối cùng, bạn có thể áp dụng middleware này vào một route hoặc nhóm route cụ thể. Ví dụ, nếu bạn muốn chỉ cho phép người dùng đã đăng nhập truy cập vào trang quản trị, bạn có thể sử dụng middleware này như sau:

Route::get('/admin', function () {

return view('admin.dashboard');

})->middleware('auth');

Làm thế nào để tạo middleware tùy biến

Việc tạo middleware tùy biến trong các framework hiện nay khá đơn giản, đặc biệt khi bạn sử dụng các framework phổ biến như Express (Node.js), Django (Python) hay Laravel (PHP). Mặc dù mỗi framework có cách triển khai middleware riêng, nhưng các nguyên lý cơ bản thường giống nhau.

Trong middleware tùy chỉnh này, chúng ta sẽ kiểm tra user agent của thiết bị và nếu người dùng đang sử dụng thiết bị di động, họ sẽ được chuyển hướng đến trang web dành cho di động. Để thực hiện điều này trong Laravel, bạn sẽ tạo một middleware tùy chỉnh và thực hiện kiểm tra trước khi yêu cầu được xử lý.

Đầu tiên, bạn có thể tạo một middleware mới bằng cách sử dụng lệnh Artisan sau:

php artisan make:middleware MobileRedirect

Lệnh này sẽ tạo ra một file middleware mới tại app/Http/Middleware/MobileRedirect.php. Bên trong file này, bạn sẽ thấy một cấu trúc cơ bản của một middleware trong Laravel, trông như sau:

<?php

namespace App\Http\Middleware;

use Closure;

class MobileRedirect

{

/**

* Handle an incoming request.

*

* @param Illuminate\Http\Request $request

* @param Closure $next

* @return mixed

*/

public function handle($request, Closure $next)

{

return $next($request);

}

}

Phần quan trọng của middleware này là phương thức handle, nơi bạn có thể thêm logic kiểm tra và xử lý yêu cầu trước khi nó được gửi đến ứng dụng. Trong trường hợp này, bạn cần kiểm tra xem yêu cầu có đến từ thiết bị di động hay không. Để làm điều này, bạn sẽ sửa lại phương thức handle như sau:

<?php

namespace App\Http\Middleware;

use Closure;

class MobileRedirect

{

/**

* Handle an incoming request.

*

* @param Illuminate\Http\Request $request

* @param Closure $next

* @return mixed

*/

public function handle($request, Closure $next)

{

// Kiểm tra nếu yêu cầu đến từ thiết bị di động

if ($request->mobile == "1") {

// Chuyển hướng đến trang web dành cho di động

return redirect('mobile-site-url');

}

return $next($request);

}

}

Ở đây, chúng ta đang kiểm tra tham số mobile trong request. Nếu giá trị của tham số này là "1", người dùng sẽ được chuyển hướng đến một URL khác, chẳng hạn như trang web dành riêng cho di động. Bạn có thể sử dụng thư viện phát hiện user agent để xác định xem người dùng đang sử dụng thiết bị di động hay không.

Lưu ý rằng trong Laravel, middleware có hai loại: before middleware và after middleware. Before middleware được thực thi trước khi yêu cầu được xử lý và phản hồi được tạo ra, trong khi after middleware chạy sau khi yêu cầu đã được xử lý.

Trong trường hợp này, vì chúng ta muốn chuyển hướng người dùng đến trang di động ngay từ đầu, nên chúng ta sẽ xây dựng middleware này như một before middleware. Điều này có nghĩa là chúng ta sẽ thực hiện kiểm tra và chuyển hướng trước khi yêu cầu được xử lý thêm.

Sau khi đã hoàn thiện logic trong middleware, bước tiếp theo là đăng ký middleware này trong ứng dụng Laravel. Để làm điều này, bạn mở file app/Http/Kernel.php và thêm middleware của bạn vào mảng $middleware, như sau:

/**

* The application's global HTTP middleware stack.

*

* These middleware are run during every request to your application.

*

* @var array

*/

protected $middleware = [

\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,

\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,

\App\Http\Middleware\TrimStrings::class,

\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,

\App\Http\Middleware\MobileRedirect::class, // Đăng ký middleware của bạn ở đây

];

Khi middleware đã được đăng ký, bạn có thể kiểm tra bằng cách truy cập vào bất kỳ route nào của ứng dụng và thêm tham số mobile=1 vào URL. Nếu tất cả mọi thứ hoạt động đúng, người dùng sẽ được chuyển hướng đến trang di động.

Ngoài ra, nếu bạn chỉ muốn áp dụng middleware này cho một số route nhất định, thay vì đăng ký nó toàn cục, bạn có thể sử dụng $routeMiddleware trong Kernel.php để chỉ định middleware cho các route cụ thể. Ví dụ:

protected $routeMiddleware = [

'mobileRedirect' => \App\Http\Middleware\MobileRedirect::class,

];

Sau đó, bạn có thể áp dụng middleware này cho các route cụ thể như sau:

Route::get('/some-page', function () {

// Nội dung của route

})->middleware('mobileRedirect');

Như vậy, với vài bước đơn giản, bạn đã có thể tạo một middleware tùy chỉnh để chuyển hướng người dùng sử dụng thiết bị di động đến trang web di động, giúp tối ưu hóa trải nghiệm người dùng trên các thiết bị di động.

Bài viết trên đây của LPTech đã giới thiệu đến bạn những thông tin cơ bản và cần thiết về công cụ Middleware. Khi biết cách ứng dụng đúng, Middleware sẽ giúp hệ thống của bạn đạt được tính bảo mật tối ưu hơn. Cảm ơn bạn đã theo dõi bài viết này của LPTech nhé!

Thông tin liên hệ

Nếu bạn có thắc mắc gì, có thể gửi yêu cầu cho chúng tôi, và chúng tôi sẽ liên lạc lại với bạn sớm nhất có thể .

Công ty TNHH TMĐT Công nghệ LP

Giấy phép kinh doanh số 0315561312/GP bởi Sở Kế Hoạch và Đầu Tư TP. Hồ Chí Minh.

Văn phòng: Lầu 4, Toà nhà Lê Trí, 164 Phan Văn Trị, Phường 12,Quận Bình Thạnh, HCMC

Hotline: 0338 586 864

Mail: sales@lptech.asia

Zalo:LP Tech Zalo Official

Liên hệ qua Zalo: 0338586864 ( hoặc bấm vào link này: http://lptech.asia/zalo-lptech). Hoặc nhập thông tin mà bạn cần hỗ trợ vào ô liên hệ bên dưới để lên lạc với LPTech nhé.

Bài viết cùng chuyên mục

Hibernate ORM là gì? Khi nào nên dùng hibernate...

Hibernate ORM là một khung làm việc mã nguồn mở hoạt động như một tầng trung gian giữa ứng dụng và cơ sở dữ liệutrong Java dùng để ánh...

cURL là gì? Các câu lệnh cơ bản để sử dụng cURL

cURL là công cụ mạnh mẽ giúp bạn gửi và nhận dữ liệu qua nhiều giao thức khác nhau. Tìm hiểu chi tiết về cURL và các tính năng, giao thức...

CQRS Pattern là gì? Design pattern chuyên tách...

Tìm hiểu thông tin chi tiết về CQRS Pattern. CQRS (Command Query Responsibility Segregation) là một pattern giúp tách biệt command và...

Bool là gì? Tìm hiểu về kiểu dữ liệu bool trong...

Boolean là một kiểu dữ liệu cơ bản trong lập trình với C/C++, Jav,... Bool dùng để biểu diễn các giá trị logic đúng (true) hoặc sai...

Unit Test là gì? Tìm hiểu về khái niệm kiểm thử...

Unit Test sẽ giúp người dùng có thể xây dựng dự án một cách hiệu quả, để biết được những thông tin hữu ích về Unit Test. Hãy theo dõi...

NVM là gì? Tìm hiểu định nghĩa và cách sử dụng NVM

NVM là viết tắt của Non Volatile Memory hay còn gọi là bộ nhớ không bay hơi. Đây là một loại loại lưu trữ máy tính giúp lưu dữ liệu ngay...

Bài viết mới nhất


Hibernate ORM là gì? Khi nào nên dùng hibernate...

Hibernate ORM là một khung làm việc mã nguồn mở hoạt động như một tầng trung gian giữa ứng dụng và cơ sở dữ liệutrong Java dùng để ánh xạ các đối...

cURL là gì? Các câu lệnh cơ bản để sử dụng cURL

cURL là công cụ mạnh mẽ giúp bạn gửi và nhận dữ liệu qua nhiều giao thức khác nhau. Tìm hiểu chi tiết về cURL và các tính năng, giao thức mà nó hỗ...

CQRS Pattern là gì? Design pattern chuyên tách...

Tìm hiểu thông tin chi tiết về CQRS Pattern. CQRS (Command Query Responsibility Segregation) là một pattern giúp tách biệt command và query cực...

Chúc mừng sinh nhật Sếp Phú

Một hành trình mới bắt đầu cùng nhiều thử thách mới. Với sự tự tin, kiên cường và bản lĩnh, LPTech tin chắc rằng Sếp Phú của LPTech sẽ có nhiều...

Bool là gì? Tìm hiểu về kiểu dữ liệu bool trong...

Boolean là một kiểu dữ liệu cơ bản trong lập trình với C/C++, Jav,... Bool dùng để biểu diễn các giá trị logic đúng (true) hoặc sai (false). Xem...

Unit Test là gì? Tìm hiểu về khái niệm kiểm thử...

Unit Test sẽ giúp người dùng có thể xây dựng dự án một cách hiệu quả, để biết được những thông tin hữu ích về Unit Test. Hãy theo dõi thông tin...

CSRF là gì? Tìm hiểu cách chống tấn công giả...

CSRF (Cross-Site Request Forgery) là một dạng tấn công trong các ứng dụng web. Tìm hiểu chi tiết về CSRF và cách bảo vệ ứng dụng khỏi nguy cơ này.

Middleware là gì? Tầm quan trọng của middleware...

Middleware là một đoạn mã trung gian nằm trong các ứng dụng web được thiết kế trên mô hình client-server. Tìm hiểu middleware là gì và ứng dụng của...

JWT là gì? Tìm hiểu về khái niệm JSON Web Token

JWT (JSON Web Token) là một phương thức xác thực bằng mã hóa phổ biến trong các ứng dụng web, giúp truyền tải thông tin, xác thực và ủy quyền một...

Shell là gì? Các loại môi trường dòng lệnh phổ...

Shell còn được gọi là môi trường dòng lệnh. Đây là nơi cho phép người dùng tương tác với hệ điều hành thông qua các dòng lệnh. Tìm hiểu về shell và...