Giúp sửa lỗi xác thực tài khoản trong spring security mvc

Chào mọi người em đang học về cái spring security thì em có code theo một anh trên mạng nhưng mà sao lúc đăng nhập mà nó không xác thực được cái tài khoản em nhập vào vậy ạ.Password em có convert sang kiểu bcrypt trên trang https://bcrypt-generator.com/ là 123456.Em nghĩ là do cái password nó không đúng kiểu của nó hay sao ấy mà nó không xác thực được ạ.Mọi người có thể vào github của em xem hộ em code với ạ chứ up lên đây hơi nhiều.Em cảm ơn ạ.
https://github.com/phamductho2000/spring-mvc-book

Hi @tho_pham
Tớ có mấy câu hỏi cho cậu:

  • Code xác thực của cậu ở đâu vậy?
    Hiện tại, tớ không tìm thấy bất cứ chỗ nào cậu lấy dữ liệu từ DB, hash password từ request, rồi so sánh trong source Java. Tớ cũng không tìm thấy chỗ nào cậu lưu một người dùng mới với password được hash với giải thuật nào đó.
  • Cậu đã thử debug chưa? :smile:
5 Likes

Cái này thằng spring security nó làm hết cho mình cậu ạ.Trong repository mình có query lấy ra username rồi còn password thằng spring security nó sẽ tự động tìm password dựa vào cái username và so sánh ạ.
Còn phần đăng ký mình chưa có làm và cái password trong db của mình thì là mình convert ở trang trên mạng thành cái kiểu bcryt ấy(mình có lấy cả password của cái ông dạy trên mạng nhưng cũng không được).
Phần security nào mình có code giống theo một anh ở trên mạng nhưng mà anh ấy đăng nhập được còn mình thì lại không mặc dù mình kiểm tra thấy code mình không khác so với anh ấy lắm chỉ thay đổi một tí thôi ạ.

Mình có debug ở đoạn nhận vào username và kiểm tra xác thực thì khi mình step over thì nó nhảy sang phần báo lỗi ở ảnh 2 ạ.


Bạn kiểm tra xem trong code của bạn đã có phần Authentication Security Config chưa ?

Có bài này hướng dẫn rất cụ thể bạn nên đọc qua xem thử nó hoạt động như thế nào nhé: https://kipalog.com/posts/Huong-dan-lap-trinh-Spring-Security

3 Likes

Hm, trong TH đó, cậu cần phải config dữ liệu lấy từ DB như thế nào, giải thuật hash password ra sao, và những nơi nào cần phải secure chứ? :smile:
Tớ không tìm được những điều đó ở các class config lẫn các class controller.

Tớ hiểu phần này, cơ mà vì tớ không tìm được chỗ nào cậu config giải thuật hash password, nên tớ không chắc cậu đang dùng bcrypt thực sự :smile:

Cậu show cho tớ code của anh trên mạng ấy được không? :smile:

Sẽ rất hữu ích nếu cậu show cho tớ nội dung exception throw ở dòng 100 (là InvalidDataAccessResourceException, cơ mà tớ chỉ thấy một phần nội dung message “could not extract…”). Stacktrace của exception đó cũng sẽ rất hữu ích (khi cậu debug trong tương lai, nhớ là 2 thông tin này rất quan trọng đấy :smile:)

Cậu thử đọc link mà @MarlBo cung cấp xem. Tớ đã kỳ vọng phần config của cậu trông giống như vậy :smile:

4 Likes

Không được, Spring dùng bcrypt với tập salt sẵn có của nó trong lib. trên web lại dùng salt khác , thì không thế nào nó check hợp lệ được.
–> Dùng chinh cái bcrypt của Spring để tạo hash.

  public static String encryptPassword(String password) {
        BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
        return encoder.encode(password);
    }
4 Likes

Đây là phần code của anh trên youtube mình học ạ


Link mình học đây ạ : https://laptrinhjavaweb.com/springmvc
Phần đầy đủ chỗ báo lỗi đây ạ

theo như stacktrace thì lỗi nằm ở phần kết nối với DB chứ k phải phần authenticate. Bạn xem lại config DB đã đúng chưa, DB đã start chưa

3 Likes

Phần kết nối với config db thì k có gì sai ạ vì em vẫn query dữ liệu bình thường ạ.

bảng user có đúng là như bạn mô tả ở trong code không. Ngoài ra bạn chụp màn hình chỗ stacktrace xem nó lỗi từ dòng nào. Stacktrace hình như nằm dưới tab services ấy

3 Likes

Đây đúng k ạ?Bảng user thì em xem lại thì đúng rồi ạ

A post was merged into an existing topic: Topic lưu trữ các post off-topic - version 3

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