繁体   English   中英

这是验证登录名的正确方法吗?

[英]Is this a correct way to validate a login?

我想知道以下验证方法是用户可以登录还是不正确,从技术上讲它是可行的,我已经尝试过并且它可以实现我想要的功能,但这是我第一次在Java上进行操作,并且我想确保我没有违反任何重要的约定。

该方法的作用是:

  1. 接收一个loginRequest,loginResponse和一个HttpSession。
  2. 根据电子邮件获取用户(我必须找到一种方法来确保它不会在用户注册时重复出现)
  3. 获取用户状态
  4. 将请求中的输入密码与用户在数据库中的摘要进行比较。

最后; 如果它们匹配并且用户处于活动状态,则可以访问该应用程序。

有什么我想念的吗? 具体来说:

我必须包括任何投掷吗? 用户的详细信息是否容易受到攻击,因为我仅通过电子邮件获得了他的信息,然后进行比较?

方法:

@Override
@Transactional
public void checkUser(LoginRequest lr, LoginResponse response, HttpSession currentSession) {

    Usuario loggedUser = loginRepository.findByEmail(lr.getEmail());
    isActive = loggedUser.getIsActiveUs();

    if (encryptor.match(lr.getPassword(), loggedUser.getPassword())) {

            if(isActive){
                response.setCode(200);
                response.setCodeMessage("User authorized");

                //CREATE AND SET THE VALUES FOR THE CONTRACT OBJECT
                response.setUserId(loggedUser.getIdUsuario());
                response.setFirstName(loggedUser.getName());
                response.setLastName(loggedUser.getLastName());
                //response.setIdTenant(loggedUser.getIdTenant().getIdTenant());

                currentSession.setAttribute("userId", loggedUser.getIdUsuario());
            }else{
                response.setCode(400);
                response.setErrorMessage("User is inactive, please contact your admin.");

            }

        } else {
            response.setCode(401);
            response.setErrorMessage("Unauthorized User");
        }
    }

提前致谢。

我必须包括任何投掷吗?

很有可能是的,至少您的loginRepository是候选对象之一,因为它可能要通过DB来获取数据(取决于其实现方式)。

用户的详细信息是否容易受到攻击,因为我仅通过电子邮件获得了他的信息,然后进行比较?

请澄清一下,“脆弱”是什么意思? (多个用户使用相同的电子邮件,出于安全原因...)

注释代码:

  • LoginResponse应该是方法的返回类型,而不是void。 输出参数是错误的代码样式
  • 我曾经在Spring上做过应用程序的那部分,但是我还没有看到这种检查用户登录的方法。 也许您应该在Google上找到一些操作方法,或者为我们提供以这种方式实现目标的动力。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM