Sử dụng Spring Security trong Spring Boot

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

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é!

  Bảo mật ứng dụng Java web bởi Spring Security
  Cài đặt Spring Boot CLI

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

Kết quả:

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:

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:

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

package com.huongdanjava.springboot.springsecurity;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

@GetMapping("")
public String sayHello() {
return "Hello";
}

}

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

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:

spring.security.user.name=khanh
spring.security.user.password=123456

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 cấu hình mặc định của class WebSecurityConfigurerAdapter để cấu hình cho Spring Security. Nếu take a look vào code của class WebSecurityConfigurerAdapter, các bạn sẽ thấy mặc định thì Spring Security cấu hình cho phần authorization như sau:

protected void configure(HttpSecurity http) throws Exception {
this.logger.debug("Using default configure(HttpSecurity). "
+ "If subclassed this will potentially override subclass configure(HttpSecurity).");
http.authorizeRequests((requests) -> requests.anyRequest().authenticated());
http.formLogin();
http.httpBasic();
}

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. 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.

package com.huongdanjava.springboot.springsecurity;

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
public class SpringSecurityConfiguration extends WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {
super.configure(http);
}
}

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!

Bài viết gốc được đăng tải tại huongdanjava.com

Có thể bạn quan tâm:

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