🛡️ Bài 1: Spring Security – Bảo vệ ứng dụng Spring Boot cơ bản
🔰 Mục tiêu
- Hiểu cơ bản về Spring Security.
- Thiết lập bảo mật bằng user/pass mặc định.
- Tuỳ chỉnh user/pass và role trong ứng dụng Spring Boot.
1️⃣ Spring Security là gì?
Spring Security là một framework mạnh mẽ cung cấp các cơ chế bảo mật cho ứng dụng Java/Spring, bao gồm:
- Xác thực (Authentication): kiểm tra danh tính người dùng.
- Phân quyền (Authorization): kiểm soát người dùng được làm gì.
- Bảo vệ khỏi tấn công phổ biến (CSRF, Session Fixation…).
🔐 Spring Security được tích hợp chặt với Spring Boot thông qua các cấu hình tự động (auto configuration).
2️⃣ Cài đặt Spring Security
Thêm dependency vào pom.xml
:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
Sau khi thêm, khi chạy ứng dụng, Spring Boot sẽ tự động bảo vệ tất cả các endpoint bằng HTTP Basic Auth.
3️⃣ Chạy thử ứng dụng
Với Spring Security được thêm, tất cả endpoint (ví dụ /hello
) sẽ bị yêu cầu đăng nhập. Mặc định, Spring Security tạo ra:
- Username:
user
- Password: Tự sinh (hiển thị trong console khi chạy app)
🧪 Truy cập
http://localhost:8080/hello
, trình duyệt sẽ yêu cầu user/pass.
4️⃣ Tuỳ chỉnh thông tin đăng nhập
Thêm vào application.properties
để đặt user/pass cố định:
spring.security.user.name=admin
spring.security.user.password=123456
5️⃣ Tạo controller để test
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "Xin chào từ Spring Security!";
}
}
6️⃣ Cấu hình Spring Security (Tùy chọn nâng cao)
Nếu muốn cấu hình phân quyền, hay mở một số endpoint, bạn có thể tạo class:
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(auth -> auth
.requestMatchers("/public").permitAll() // Không cần login
.anyRequest().authenticated()) // Các request khác cần login
.httpBasic(); // Basic Auth
return http.build();
}
}
✅ Kết luận
- Spring Security bảo vệ ứng dụng của bạn một cách tự động và mạnh mẽ.
- Dễ dàng cấu hình thông tin đăng nhập và phân quyền.
- Có thể mở rộng để dùng JWT, OAuth2, hoặc tích hợp với cơ sở dữ liệu.