[英]Spring data CrudRepository (hibernate) findone return 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/UserDetailsService.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.