Facebook Linkedin Twitter
  • Tìm việc IT
  • Tạo CV Online
  • CÔNG TY TUYỂN DỤNG IT
  • Lập Trình
    • AI – Machine Learning
    • Frontend
    • Backend
    • Fullstack
    • Mobile
    • Product
    • Devops
    • Java
    • PHP
    • Python
    • Xu hướng công nghệ
    • Tổng quan ngành IT
      • Báo cáo thị trường IT
      • Con đường sự nghiệp IT
      • Chuyên gia nói
      • Sự kiện IT
    • Developer Resources
      • Sách lập trình
      • Tài liệu lập trình
      • Source Code
  • KỸ NĂNG TÌM VIỆC
    • Kinh nghiệm phỏng vấn
    • Chuẩn hóa CV IT
    • Đàm phán lương thưởng
    • Cẩm nang tuyển dụng
      • Tìm kiếm nhân tài
      • Nghệ thuật quản trị
Search
  • 0888 1555 00
  • Post a job
  • Contact us
Sign in
Welcome! Log into your account
Forgot your password? Get help
Password recovery
Recover your password
A password will be e-mailed to you.
  • Tìm việc IT
  • Tạo CV Online
  • CÔNG TY TUYỂN DỤNG IT
  • Lập Trình
    • AI – Machine Learning
    • Frontend
    • Backend
    • Fullstack
    • Mobile
    • Product
    • Devops
    • Java
    • PHP
    • Python
    • Xu hướng công nghệ
    • Tổng quan ngành IT
      • Báo cáo thị trường IT
      • Con đường sự nghiệp IT
      • Chuyên gia nói
      • Sự kiện IT
    • Developer Resources
      • Sách lập trình
      • Tài liệu lập trình
      • Source Code
  • KỸ NĂNG TÌM VIỆC
    • Kinh nghiệm phỏng vấn
    • Chuẩn hóa CV IT
    • Đàm phán lương thưởng
    • Cẩm nang tuyển dụng
      • Tìm kiếm nhân tài
      • Nghệ thuật quản trị
Home Công nghệ Custom login page sử dụng Bootstrap và Thymeleaf trong Spring Security
  • Công nghệ
  • Lập Trình

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

4726
Facebook
Linkedin
Telegram

    Bài viết được sự cho phép của tác giả Nguyễn Hữu Khanh 

    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.

    Xem thêm Việc làm IT hấp dẫn trên TopDev

      Bảo mật ứng dụng Java web bởi Spring Security
      Cách sử dụng properties trong tập tin cấu hình của Spring

    Đầ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:

    <dependency>
    <groupId>org.webjars</groupId>
    <artifactId>webjars-locator-core</artifactId>
    </dependency>
    <dependency>
    <groupId>org.webjars</groupId>
    <artifactId>bootstrap</artifactId>
    <version>5.0.1</version>
    </dependency>

    Để đơ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:

    <!DOCTYPE html>
    <html lang="en" xmlns:th="http://www.thymeleaf.org">
    <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <meta name="description" content="">
    <meta name="author" content="">
    <title>Spring Security Example</title>
    <link href="/webjars/bootstrap/css/bootstrap.min.css" rel="stylesheet">
    </head>
    <body>
    <div class="container">
    <h2 class="form-signin-heading">Welcome to Huong Dan Java, please login</h2>
    <div th:if="${param.error}" class="alert alert-danger"> 
    Invalid username and password.
    </div>
    <div th:if="${param.logout}" class="alert alert-success"> 
    You have been logged out.
    </div>
    <form class="form-signin" method="POST" th:action="@{/login}">
    <p>
    <label for="username" class="sr-only">Username</label> 
    <input type="text" id="username" name="username" class="form-control"
    placeholder="Username" required autofocus>
    </p>
    <p>
    <label for="password" class="sr-only">Password</label> 
    <input type="password" id="password" name="password" class="form-control"
    placeholder="Password" required>
    </p>
    <button class="btn btn-lg btn-primary btn-block" type="submit">Login</button>
    </form>
    </div>
    </body>
    </html>
    Xem tiếp...

    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:

    <!DOCTYPE html>
    <html lang="en" xmlns:th="http://www.thymeleaf.org">
    <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <meta name="description" content="">
    <meta name="author" content="">
    <title>Spring Security Example</title>
    <link href="/webjars/bootstrap/css/bootstrap.min.css" rel="stylesheet">
    </head>
    <body>
    <div class="container">
    <h2 class="form-signin-heading">Hello</h2>
    </div>
    </body>
    </html>
    Xem tiếp...

    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:

    package com.huongdanjava.springsecurity;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.GetMapping;
    
    @Controller
    public class ApplicationController {
    
    @GetMapping("/login")
    public String viewLoginPage() {
    return "login";
    }
    
    @GetMapping("/")
    public String hello() {
    return "home";
    }
    }
    Xem tiếp...

    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:

    package com.huongdanjava.springsecurity;
    
    import org.springframework.security.config.annotation.web.builders.HttpSecurity;
    import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
    import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
    
    @EnableWebSecurity
    public class SpringSecurityConfiguration extends WebSecurityConfigurerAdapter {
    
    @Override
    protected void configure(HttpSecurity http) throws Exception {
    super.configure(http);
    }
    
    }
    Xem tiếp...

    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:

    package com.huongdanjava.springsecurity;
    
    import org.springframework.security.config.annotation.web.builders.HttpSecurity;
    import org.springframework.security.config.annotation.web.builders.WebSecurity;
    import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
    import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
    
    @EnableWebSecurity
    public class SpringSecurityConfiguration extends WebSecurityConfigurerAdapter {
    
    @Override
    protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests()
    .anyRequest().authenticated()
    .and()
    .formLogin()
    .loginPage("/login")
    .permitAll();
    }
    
    @Override
    public void configure(WebSecurity web) throws Exception {
    web.ignoring().antMatchers("/webjars/**");
    }
    }
    Xem tiếp...

    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

    Bài viết gốc được đăng tải tại huongdanjava.com
    Có thể bạn quan tâm:
    • Sử dụng Spring Security trong Spring Boot
    • Custom page transition – Flutter
    • Bảo mật ứng dụng Java web bởi Spring Security
    Xem thêm Việc làm IT hấp dẫn trên TopDev
    • TAGS
    • custom login page
    • spring security
    Facebook
    Linkedin
    Telegram
      TopDev
      Ban Biên Tập Blog TopDev. Nice to meet you

      RELATED ARTICLESMORE FROM AUTHOR

      authentication

      Authentication trong Spring Security

      Trong các dự án thực tế, các bạn sẽ gặp những trường hợp mà ứng dụng cần thiết phải sử dụng 2 cách login khác nhau tuỳ theo role của user

      Multiple login page với Spring Security

      Custom authentication filter đăng nhập không cần password trong Spring Security

      Custom authentication filter đăng nhập không cần password trong Spring Security

      Sử dụng Spring Security trong Spring Boot

      Sử dụng Spring Security trong Spring Boot

      Bảo mật ứng dụng Java web bởi Spring Security

      Bảo mật ứng dụng Java web bởi Spring Security

      ĐỪNG BỎ LỠ

      • Hướng dẫn xử lý database trong Spring MVC 5 với Hibernate
      • Tìm hiểu về xác thực và phân quyền trong ứng dụng
      • Type Query trong GraphQL với Spring Boot
      • Giới thiệu về Spring Integration
      • Giới thiệu về GraphQL. Cách giải quyết những hạn chế của RESTful API

      VIỆC LÀM IT LƯƠNG CAO

      • Việc làm PHP
      • Việc làm JavaScript
      • Việc làm Java
      • Việc làm Front-end
      • Việc làm Back-end
      • Việc làm .NET
      • Việc làm Python
      • Việc làm Golang
      • Việc làm iOS
      • Việc làm Android
      • Việc làm Flutter
      • Việc làm Tester
      • Việc làm Node.js
      Việc làm HOT cho Fresher
      • Việc làm Fresher Java
      • Việc làm Fresher Javascript
      • Việc làm Fresher PHP
      • Việc làm Fresher Python
      • Việc làm Fresher ReactJS
      • Việc làm Fresher NodeJS
      • Việc làm Fresher C/C++
      • Việc làm Fresher Tester
      • Việc làm Fresher Frontend
      • Việc làm Fresher Backend
      Việc làm theo ngành nghề
      • Việc làm IT ngành Outsourcing
      • Việc làm IT ngành Product
      • Việc làm IT ngành Ngân hàng
      • Việc làm IT ngành Viễn thông
      • Việc làm IT ngành Game / Giải trí
      • Việc làm IT ngành Fintech
      • Việc làm IT ngành Phần cứng
      • Việc làm IT ngành Phần mềm
      • Việc làm IT ngành Quảng cáo truyền thông
      • Việc làm IT ngành Dịch vụ IT
      Việc làm IT theo loại hình
      • Việc làm thực tập sinh IT
      • Việc làm IT Fresher
      • Việc làm IT tại Hồ Chí Minh
      • Việc làm IT tại Hà Nội
      • Việc làm IT tại Đà Nẵng
      • Việc làm IT Part-time
      • Việc làm IT Fulltime
      • Việc làm IT Remote
      ABOUT US
      TopDev is a recruitment network and ecosystem in Mobile & IT fields. We are top leading recruitment network in Mobile & IT fields, in Vietnam, offering Tech talent solution which meets your needs. Our networks cover 95% of Tech communities in Vietnam and our clients come from both Vietnam and South East Asia.
      Hotline: 0888 1555 00

      app_store google_play
      Contact us: contact@topdev.vn
      FOLLOW US
      Facebook Linkedin Twitter