Sử dụng Spring Security trong Spring Boot

Mình đã giới thiệu với các bạn cách cài đặt và cấu hình để sử dụng Spring Security trong các ứng dụng Spring MVC. Với Spring Boot application, thì việc cấu hình Spring Sẹcurity sẽ đơn giản hơn rất nhiều. Chúng ta không cần phải làm từng step để cấu hình cho phần authentication và authorization của ứng dụng. Spring Boot hỗ trợ chúng ta giảm bớt rất nhiều thao tác với những cấu hình mặc định cho Spring Security. Cụ thể như thế nào? Mình sẽ chia sẻ với các bạn một số kiến thức về Spring Security trong Spring Boot application các bạn nhé!

Đầu tiên, mình sẽ tạo mới một Spring Boot application:

Sử dụng Spring Security trong Spring Boot

với Spring Web và Spring Security dependencies như sau:

Sử dụng Spring Security trong Spring Boot

Kết quả:

Sử dụng Spring Security trong Spring Boot

Ngay lúc này, các bạn chạy ứng dụng lên rồi request tới địa chỉ http://localhost:8080, các bạn sẽ thấy trang login mặc định của Spring Security được hiển thị như sau:

Sử dụng Spring Security trong Spring Boot

Rõ ràng là, Spring Boot đã có những cấu hình mặc định cho Spring Security ngay khi chúng ta thêm dependency của nó. Username mặc định để các bạn có thể đăng nhập vào là “user” và password được generate và in ra trong console log đó các bạn.

Sử dụng Spring Security trong Spring Boot

Nhập thông tin username, password rồi nhấn nút Sign In, các bạn sẽ thấy kết quả như sau:

Sử dụng Spring Security trong Spring Boot

Đây là do chúng ta chưa định nghĩa một request nào trong ứng dụng của chúng ta đó các bạn. Nếu mình định nghĩa controller như sau:

thì các bạn sẽ thấy kết quả như sau:

Sử dụng Spring Security trong Spring Boot

Các bạn có thể thay đổi username và password mặc định này bằng cách cấu hình 2 property sau trong tập tin application.properties:

Chạy lại ứng dụng, các bạn sẽ thấy default password sẽ không được generate nữa và chúng ta có thể sử dụng username và password mà mình đã khai báo ở trên để đăng nhập.

Spring Boot sử dụng class SecurityAutoConfiguration để gán cấu hình mặc định cho Spring Security. Nếu take a look vào code của class SecurityAutoConfiguration này:

các bạn sẽ thấy có 3 class configuration khác được import vào class này:

Trong đó, class SpringBootWebSecurityConfiguration định nghĩa cấu hình mặc định của Spring Security cho phần authorization như sau:

Như các bạn thấy, mặc định Spring Security sẽ chặn hết tất cả các request, tự động generate login form và sử dụng http basic cho phần authentication.

Class WebSecurityEnablerConfiguration thì tự động add annotation @EnableWebSecurity nếu Spring Security được thêm vào project dependencies.

Còn class SecurityDataConfiguration thì tự động cấu hình liên quan đến Spring Data.

Như mình đã nói với các bạn trong bài viết về Cấu hình Spring Security sử dụng WebSecurityConfigurerAdapter và AbstractSecurityWebApplicationInitializer, chúng ta có thể override class WebSecurityConfigurerAdapter để thay đổi cấu hình này.

và tất nhiên, các bạn cũng có thể override phương thức configure(AuthenticationManagerBuilder auth) để thay thế cho phần cấu hình authentication nha các bạn!

Add Comment