簡體   English   中英

CrudRepository 返回 null

[英]CrudRepository return null

我找不到問題出在哪里。 我正在通過用戶名和密碼在數據庫中搜索用戶。 但它返回空值。

這是我的存儲庫:

@Repository
public interface UserCrudRepository extends CrudRepository<User, Integer>{

List<User> findByUsernameAndPassword(String username, String password);}

這是我的服務:

@Service
public class UserService {
@Autowired
private UserCrudRepository crudRepo;


public List<User> findByUsernameAndByPassword(String username, String password){
//List<UserModel> ut=null;
//ut= crudRepo.findByUsernameAndPassword(username, password);
return crudRepo.findByUsernameAndPassword(username, password);
}

當我調試我的應用程序時,我在“findByUsernameAndPassword(username, password);”中看到了用戶寫的信息存在,但方法返回空值。

這里有什么問題?

由於您已加密密碼,因此最好的方法是僅通過username搜索username ,然后使用BCryptPasswordEncoder將您的純文本password與您在數據庫中的編碼版本進行匹配。 您可以在您的服務中獲得一個BCryptPasswordEncoder ,如下所示:

@Service
public class UserService {
  @Autowired
  private BCryptPasswordEncoder bCryptPasswordEncode;

  @Autowired
  private UserCrudRepository crudRepo;

  public List<User> findByUsernameAndByPassword(String username, String password){
    List<User> users = crudRepo.findByUsername(username);
    for (user : users) {
       if (bCryptPasswordEncoder.matches(password, user.getPassword())) {
          // passwords match
       }
    }
  }
}

您還需要有一個配置文件,您可以在其中要求創建BCryptPasswordEncoder

public class SecurityConfiguration {
    @Bean
    public BCryptPasswordEncoder bCryptPasswordEncoder() {
        return new BCryptPasswordEncoder();
    }
}

您需要調整您的存儲庫:

@Repository
public interface UserCrudRepository extends CrudRepository<User, Integer>{
  List<User> findByUsername(String username);
}

我假設您將此用作表單 os 身份驗證,因此您可以考慮查看UserDetailsService接口( https://docs.spring.io/spring-security/site/docs/current/api/org/springframework/ security/core/userdetails/UserDetailsS​​ervice.html ),如果您還沒有使用它。

我認為您需要編寫一個查詢來獲取UserCrudRepository 中的用戶詳細信息。

@Query("SELECT u FROM User u WHERE lower(u.username) LIKE %?1% AND " +
      "lower(u.password) LIKE %?2%")
List<User> findByUsernameAndPassword(String username, String password);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM