Reputation: 211
My project based on spring boot,Thymeleaf,mysql,html and Jquery.
i wrote a query for checking user name and password is valid or not,if valid means return TRUE otherwise false..This is my scenario..but it passing null...so it becomes nullpointer exception.. Here is my code
public interface RepoUserSignup extends JpaRepository<EntUserSignup, Integer>
{
@Query("SELECT pk FROM EntUserSignup pk WHERE pk.username=:uname AND pk.password=:pwd")
Boolean checkUsername(@Param("uname") String username,@Param("pwd") String password);
}
Please help me..Thanks in advance
Upvotes: 4
Views: 20283
Reputation: 30279
Replace your method with this:
Optional<EntUserSignup> findByUsernameAndPassword(String username, String password);
Then in your business layer you can do something like this:
EntUserSignup user = findByUsernameAndPassword(username, password)
.orElseThrow(() -> new UsernameNotFoundException("User not found!"));
And of cause don't forget about password in plain text...
A good tutorial how to implement security in Spring Boot application...
Upvotes: 3
Reputation: 211
i just change my return type
@Query("SELECT pk FROM EntUserSignup pk WHERE pk.username=:uname AND pk.password=:pwd")
EntUserSignup checkUsername(@Param("uname") String username,@Param("pwd") String password);
So when passing username and password matches menans it will return the entity value otherwise null.so we can decide there is no matched username and password.then we can write the logic as
@Service
public Boolean doCheckUserLogin(EntUserSignup user) {
Boolean result = false;
try {
EntUserSignup entResult = repoSignup.checkUsername(user.getUsername(),user.getPassword());
if(entResult!=null)
{
result = true;
}
else
{
result = false;
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
result = false;
}
return result;
}
This logics works perfectly...
Upvotes: 1
Reputation: 59950
Your query return an Object and not a boolean so you have two ways :
EntUserSignup checkUsername(@Param("uname") String username,@Param("pwd") String password);
instead then check if there are a result or not@Query("SELECT COUNT(pk) > 0 FROM EntUserSignup pk WHERE pk.username=:uname AND pk.password=:pwd")
so if there are some results COUNT(pk) > 0
will return true else it will return falseUpvotes: 2