我有一个名为student的数据库表,包含fname, lname, city, email &密码。我想创建一个Spring启动API,这将检查电子邮件&登录密码。我已经尝试了一些东西,但这是在检查总学生表中的电子邮件和总学生表中的密码。
我想先找到电子邮件,然后检查给定的密码是否存在相同的电子邮件
请帮我一下。我在控制器中的代码:-
@GetMapping("login/{email}/{pass}")
public String login(@PathVariable("email") String email, @PathVariable("pass") String pass) {
Boolean isEmail = studentService.existsByEmail(student.getEmail());
Boolean isPassword = studentService.existsByPassword(student.getPassword());
if(isEmail) {
if(isPassword) {
return "student exists";
}
return "Not found";
}
return "Did Not found";
}
最终解决方案:-(特别感谢所有人)
@PostMapping("/login")
public String login(@RequestBody Student student) {
if(studentService.existsByEmailAndPassword(student.getEmail(), student.getPassword())) {
String resultString = "Logged in Successfully";
return resultString;
}
return "Student doesn't exist with the given email id:- " + student.getEmail();
}
在您的@Repository中,您需要一个findByEmail
方法,或者带有@Query注释和您的实现,或者带有spring命名约定(在这种情况下,请阅读spring JpaRepository)。这个方法应该返回整个Student对象,你可以检查它的密码。
您的解决方案似乎是错误的,因为它可能返回假阳性。
您的解决方案:
@PostMapping("/login")
public String login(@RequestBody Student student) {
if(studentService.existsByEmail(student.getEmail())) {
if(studentService.existsByPassword(student.getPassword())) {
return "student Exists";
}
return "Incorrect Password";
}
return "Student doesn't exist with this email id:- " + student.getEmail() ;
}
假设有两个学生,Mark的电子邮件地址"mark@student.com"和密码" markmark "和Kim的电子邮件地址"kim@student.com"密码"kimmykimkim_">
如果您的请求指定电子邮件"mark@student.com"密码"kimmykimkim"那么你的解决方案中的代码将返回"student exists"。mark@student.com确实存在,但是他们的密码不是"kimmykimkim_"。
您可以通过添加和使用以下存储库方法来修复它:
existsByEmailAndPassword(String email, String password);
这是学校的作业吗?如果没有,你应该考虑加密存储你的密码。然后,您首先需要检索学生的密码,并给出他们的电子邮件地址。然后,您需要使用密码编码器将明文密码与加密密码进行比较。今年春季安全引用可以是有用的。