Java 电子邮件或用户名验证

Java 电子邮件或用户名验证,java,spring,Java,Spring,我想通过控制器检查来自数据库的电子邮件,并检查电子邮件是否已经存在!!!(email=数据库中的列),请给我一些新想法 @RequestMapping(value = "/signup", method = RequestMethod.POST) public String saveUser(@ModelAttribute User user, Model model) { if (!user.getName().isEmpty() || !user.getEmail().is

我想通过控制器检查来自数据库的电子邮件,并检查电子邮件是否已经存在!!!(email=数据库中的列),请给我一些新想法

@RequestMapping(value = "/signup", method = RequestMethod.POST)
    public String saveUser(@ModelAttribute User user, Model model) {

    if (!user.getName().isEmpty() || !user.getEmail().isEmpty() || !user.getPassword().isEmpty()) {

        user.setPassword(DigestUtils.md5DigestAsHex(user.getPassword().getBytes()));

        udao.addUser(user);
        return "login";
        }

        else {
        model.addAttribute("error", "fill the form completely!!!");
        return "signup";
    }

}

假设您拥有udao作为数据访问权限,您只需要创建一个方法,以获得给定电子邮件id的用户对象,如

@Query(value="select * from users where email = :emailId and isactive=1", nativeQuery=true)
User getUserByEmailId(@Param("emailId")String emailId);

@Query(value="select count(*) from users where email = :emailId and isactive=1", nativeQuery=true)
Integer getUserByEmailId(@Param("emailId")String emailId);
在选项2中,您只需获得拥有该电子邮件的用户数,
0
表示该电子邮件是
唯一的
,反之亦然

此DAO完成后,您可以通过调用此方法进行验证,如果您的响应为null,则表示数据库中没有用户,否则用户存在,您可以使用提供的电子邮件id向最终用户显示该用户已经存在

改进代码的两点, 请不要在控制器中编写
DAO
访问逻辑,最好使用
UserDetailsService
这样的服务,以便在服务中应用所有数据访问和业务规则,促进SOC、单元可测试性等

也可以考虑使用一个高度安全的算法来处理密码,如代码> PBKDF2</代码>,这是非常安全的。


HTH

假设您拥有udao作为数据访问权限,您只需要创建一个方法来获取给定电子邮件id的用户对象,如

@Query(value="select * from users where email = :emailId and isactive=1", nativeQuery=true)
User getUserByEmailId(@Param("emailId")String emailId);

@Query(value="select count(*) from users where email = :emailId and isactive=1", nativeQuery=true)
Integer getUserByEmailId(@Param("emailId")String emailId);
在选项2中,您只需获得拥有该电子邮件的用户数,
0
表示该电子邮件是
唯一的
,反之亦然

此DAO完成后,您可以通过调用此方法进行验证,如果您的响应为null,则表示数据库中没有用户,否则用户存在,您可以使用提供的电子邮件id向最终用户显示该用户已经存在

改进代码的两点, 请不要在控制器中编写
DAO
访问逻辑,最好使用
UserDetailsService
这样的服务,以便在服务中应用所有数据访问和业务规则,促进SOC、单元可测试性等

也可以考虑使用一个高度安全的算法来处理密码,如代码> PBKDF2</代码>,这是非常安全的。


HTH

假设您使用的是Spring Data JPA,您可以通过以下方式查询数据库,以检查是否有用户使用该电子邮件(检查示例60.UserRepository中的查询方法声明):


假设您使用的是Spring Data JPA,您可以通过以下方式查询数据库,以检查是否有用户使用该电子邮件(检查UserRepository中的示例60.query方法声明)


感谢您的回答,实际上我想在控制器内的db中寻址电子邮件路径,如(@PathVariable(“电子邮件”)字符串电子邮件)列,并仅检查其中的输入,如果不存在类似的电子邮件,则将其传递到数据库…感谢您的回答,实际上我想寻址电子邮件路径,如(@PathVariable(“电子邮件”)字符串(电子邮件)列在控制器内的db中,并仅检查其中的输入,如果不存在类似的电子邮件,则将其传递到数据库。。。