我的项目基于spring boot,Thymeleaf,mysql,html和Jquery。
我写了一个检查用户名和密码是否有效的查询,如果有效则表示返回TRUE,否则为false ..这是我的方案..但它传递null ...所以它变为nullpointer异常.. 这是我的代码
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);
}
请帮帮我..谢谢提前
答案 0 :(得分:2)
您的查询返回一个Object而不是布尔值,因此您有两种方法:
EntUserSignup checkUsername(@Param("uname") String username,@Param("pwd") String password);
,然后检查是否有结果@Query("SELECT COUNT(pk) > 0 FROM EntUserSignup pk WHERE pk.username=:uname AND pk.password=:pwd")
的数量,这样如果有一些结果COUNT(pk) > 0
将返回true,否则它将返回false 答案 1 :(得分:1)
用以下方法替换您的方法:
Optional<EntUserSignup> findByUsernameAndPassword(String username, String password);
然后在您的业务层中,您可以执行以下操作:
EntUserSignup user = findByUsernameAndPassword(username, password)
.orElseThrow(() -> new UsernameNotFoundException("User not found!"));
因为不要忘记password in plain text ......
Spring Boot应用程序中的一个很好的教程how to implement security ...
答案 2 :(得分:1)
我只是更改了我的返回类型
@Query("SELECT pk FROM EntUserSignup pk WHERE pk.username=:uname AND pk.password=:pwd")
EntUserSignup checkUsername(@Param("uname") String username,@Param("pwd") String password);
因此,当传递用户名和密码匹配menans时,它将返回实体值,否则返回null。因此我们可以确定没有匹配的用户名和密码。然后我们可以将逻辑编写为
<强> @服务强>
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;
}
这种逻辑非常有效......