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

时间:2016-02-25 20:32:57

标签: java spring login

我想知道以下方法验证用户是否可以登录是正确的,从技术上讲它是有效的,我已经尝试了它并且它做了我想要的但是这是我第一次在Java上这样做我想确保我没有违反任何重要的约定。

这种方法的作用是:

  1. 收到loginRequest,loginResponse和HttpSession。
  2. 根据电子邮件获取用户(我必须找到一种方法 确定它不会重复用户注册)
  3. 获取用户的状态
  4. 将请求中的输入密码与用户进行比较 摘要数据库。
  5. 最后;如果它们匹配且用户处于活动状态,则可能     访问应用程序。

    我有什么遗失的吗? Especifically:

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

    方式:

    @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");
            }
        }
    

    提前致谢。

1 个答案:

答案 0 :(得分:0)

  

我是否必须包括任何一次投掷;抓住?

很可能是的,至少你的loginRepository是候选人之一,因为它可能会转到数据库来获取数据(取决于它是如何实现的)。

  

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

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

代码备注:

  • LoginResponse应该是方法的返回类型而不是void。输出参数是错误的代码样式
  • 我用Spring做了几次应用程序的部分,但我没有看到这样检查用户登录的方法。也许你应该谷歌一些方法或者为我们提供你的动机来做到这一点。