我找不到問題出在哪里。我正在通過用戶名和密碼在資料庫中搜索用戶。但它回傳空值。
這是我的存盤庫:
@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);”中看到了 用戶寫的資訊存在,但方法回傳空值。
這里有什么問題?
uj5u.com熱心網友回復:
由于您已加密密碼,因此最好的方法是僅搜索用戶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 ),如果您還沒有使用它。
uj5u.com熱心網友回復:
我認為您需要撰寫一個查詢來獲取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);
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/343381.html
標籤:爪哇 春天 crud-repository
