Công ty của tôi đã đánh giá Spring MVC để xác định xem chúng tôi có nên sử dụng nó trong một trong các dự án tiếp theo của chúng tôi không. Cho đến nay tôi yêu những gì tôi đã thấy, và ngay bây giờ tôi đang xem mô-đun Spring Security để xác định xem đó có phải là thứ chúng ta có thể / nên sử dụng hay không.
Yêu cầu bảo mật của chúng tôi là khá cơ bản; người dùng chỉ cần có thể cung cấp tên người dùng và mật khẩu để có thể truy cập vào một số phần nhất định của trang web (chẳng hạn như để có được thông tin về tài khoản của họ); và có một số trang trên trang web (Câu hỏi thường gặp, Hỗ trợ, v.v.) nơi người dùng ẩn danh sẽ được cấp quyền truy cập.
Trong nguyên mẫu tôi đã tạo, tôi đã lưu trữ một đối tượng "LoginCredentials" (chỉ chứa tên người dùng và mật khẩu) trong Phiên cho người dùng được xác thực; một số bộ điều khiển kiểm tra xem liệu đối tượng này có trong phiên để lấy tham chiếu đến tên người dùng đã đăng nhập không, chẳng hạn. Thay vào đó, tôi đang tìm cách thay thế logic được trồng tại nhà này bằng Spring Security, điều này sẽ có lợi ích tốt khi loại bỏ bất kỳ loại "làm thế nào để chúng tôi theo dõi người dùng đã đăng nhập?" và "làm thế nào để chúng tôi xác thực người dùng?" từ bộ điều khiển / mã doanh nghiệp của tôi.
Có vẻ như Spring Security cung cấp một đối tượng "ngữ cảnh" (trên mỗi luồng) để có thể truy cập tên người dùng / thông tin chính từ bất kỳ đâu trong ứng dụng của bạn ...
Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
... có vẻ rất không giống mùa xuân vì đối tượng này là một đơn vị (toàn cầu), theo một cách nào đó.
Câu hỏi của tôi là: nếu đây là cách tiêu chuẩn để truy cập thông tin về người dùng được xác thực trong Spring Security, thì cách nào được chấp nhận để đưa đối tượng Xác thực vào SecurityContext để nó có sẵn cho các bài kiểm tra đơn vị của tôi khi kiểm tra đơn vị yêu cầu Người dùng đã được chứng thực?
Tôi có cần nối dây này trong phương thức khởi tạo của từng trường hợp thử nghiệm không?
protected void setUp() throws Exception {
...
SecurityContextHolder.getContext().setAuthentication(
new UsernamePasswordAuthenticationToken(testUser.getLogin(), testUser.getPassword()));
...
}
Điều này có vẻ quá dài dòng. Có cách nào dễ hơn không?
Bản SecurityContextHolder
thân vật thể có vẻ rất không giống mùa xuân ...