Hỏi cơ chế login trong Spring Security?

Chào cả nhà, mình có điều muốn hỏi về cơ chế login của Spring security. Mình dùng userdetailservice để lấy thông tin user từ db. Khi implement interface này thì phải định nghĩa phương thức public UserDetails loadUserByUsername(String arg0).

Tại sao nó chỉ cần check username mà không cần password? Và nó sẽ thực hiện việc check passwprd khi nào?

Bạn nào biết chỉ giùm mình.

đằng trước nó là lớp AbstractUserDetailsAuthenticationProvider , trong đó có hàm authenticate bạn có thể implement lại nếu thích, lớp này composite interface UserDetailsService của bạn , trong đó gọi hàm loadUserByUsername lấy thông tin user sau đó mới gọi tới hàm check trong interface UserDetailsChecker, trong đó sẽ compare cái password client gửi lên , hash nó nếu bạn định nghĩa Encoder , rồi so sánh giá trị đó với giá trị mà bạn load lên từ DB , chi tiết bạn debug rồi đọc source nó nghe

3 Likes

Vì cái UserDetails đã chứa sẵn method getPassword() rồi nhé :grinning:
Hình như có cái class JdbcUserDetailsManager nó làm hết từ a-z cho bạn, bạn xem thử khỏi cần implement gì hết :kissing:

Cảm ơn các bạn, mình đã kiểm tra và đúng như Kevin nói, ban đầu nó chỉ cần load user có username như đã nhập trong form login, sau đó sẽ trả về 1 đối tượng user bao gồm thông tin (name, pass, roles), từ user này nó sẽ so sánh với thông tin nhập vào, nếu khớp nó sẽ dựa tiếp vào thông tin roles để xác định quyền của user.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?