Custom login page sử dụng Bootstrap và Thymeleaf trong Spring Security

Thông thường, chúng ta sẽ không sử dụng trang login mặc định của Spring Security cho các ứng dụng được deploy lên production, nguyên nhân vì sao các bạn cũng có thể đoán được đúng không? Trang login mặc định này để chúng ta learning là chủ yếu. Vậy để thay thế trang login mặc định này, chúng ta sẽ làm như thế nào? Trong bài viết này, mình sẽ hướng dẫn các bạn làm điều này.

Đầu tiên, mình sẽ tạo mới một Spring Boot với Spring Security, Spring Web và Thymeleaf dependencies.

Kết quả như sau:

Custom login page sử dụng Bootstrap và Thymeleaf trong Spring Security

Chạy ví dụ này, các bạn sẽ thấy trang login mặc định của Spring Security như sau:

Custom login page sử dụng Bootstrap và Thymeleaf trong Spring Security

Bây giờ, mình sẽ sử dụng Bootstrap để viết custom login page.

Mình sẽ sử dụng WebJars để quản lý thư viện Bootstrap:

Để đơn giản, custom page login của mình có các thành phần cũng giống như trang login mặc định của Spring Security, chỉ khác biệt là mình thay thế chữ “Please sign in” bằng dòng chữ “Welcome to Huong Dan Java, please login in” và nút “Sign in” giờ là “Login”.

Code trang login.html nằm trong thư mục src/main/resources/templates của mình với Bootstrap như sau:

Ngoài ra mình cũng expose một trang khác, chỉ đơn giản để hiển thị trang home sau khi login mà thôi:

Các bạn đọc thêm cách sử dụng Thymeleaf trong Spring Boot để hiểu tại sao mình để tập tin login.html trong thư mục src/main/resources/templates nhé!

Giờ mình sẽ tạo mới một controller để expose các trang này:

Sau khi đã expose trang custom login xong, giờ là lúc chúng ta sẽ cấu hình Spring Security để sử dụng trang custom này.

Các bạn cần override lại phương thức configure(HttpSecurity http) để làm việc này:

Chúng ta sẽ cấu hình tất cả các request phải authenticated và sử dụng trang login custom của chúng ta như sau:

Như các bạn thấy, từ đối tượng HttpSecurity, chúng ta sẽ gọi phương thức formLogin() để lấy về đối tượng FormLoginConfigurer để cấu hình cho trang login của Spring Security. Từ đối tượng FormLoginConfigurer này, chúng ta sẽ sử dụng phương thức loginPage() với tham số là tên của login page để để override lại trang login mặc định của Spring Security.

Mình cũng cấu hình thêm configure(WebSecurity web) để ignore security cho các đường dẫn liên quan đến WebJars, ở đây là đường dẫn đến Bootstrap CSS.

OK, đến đây thì các bạn có thể chạy lại ứng dụng để kiểm tra kết quả.

Trang login của mình giờ sẽ như sau:

Custom login page sử dụng Bootstrap và Thymeleaf trong Spring Security

Đăng nhập với username là user và password được generated, các bạn sẽ thấy kết quả như sau:

Custom login page sử dụng Bootstrap và Thymeleaf trong Spring Security

Add Comment