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.
Để đơ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><htmllang="en"xmlns:th="http://www.thymeleaf.org"><head><metacharset="utf-8"><metaname="viewport"content="width=device-width, initial-scale=1, shrink-to-fit=no"><metaname="description"content=""><metaname="author"content=""><title>Spring Security Example</title><linkhref="/webjars/bootstrap/css/bootstrap.min.css"rel="stylesheet"></head><body><divclass="container"><h2class="form-signin-heading">Welcome to Huong Dan Java, please login</h2><divth:if="${param.error}"class="alert alert-danger">
Invalid username and password.
</div><divth:if="${param.logout}"class="alert alert-success">
You have been logged out.
</div><formclass="form-signin"method="POST"th:action="@{/login}"><p><labelfor="username"class="sr-only">Username</label><inputtype="text"id="username"name="username"class="form-control"placeholder="Username"requiredautofocus></p><p><labelfor="password"class="sr-only">Password</label><inputtype="password"id="password"name="password"class="form-control"placeholder="Password"required></p><buttonclass="btn btn-lg btn-primary btn-block"type="submit">Login</button></form></div></body></html>
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:
Đăng nhập với username là user và password được generated, các bạn sẽ thấy kết quả như sau: