2016-02-25 38 views
0

我想知道是以下方法来验证是用户可以登录或不是正确的,tecnically它的作品,我已经尝试过它,它做我想要的,但这是我第一次在Java上做这个,我想以确保我没有违反任何重要的惯例。这是验证登录名的正确方法吗?

什么这个方法的作用是:

  1. 接收一个loginRequest,loginResponse和一个HttpSession。
  2. 获取用户基于电子邮件(我必须找到一种方法,使 确保它不会在用户注册重复)
  3. 获取用户的身份
  4. 与请求中比较输入密码用户在数据库中的 摘要。

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

有什么我失踪?特别是:

我是否必须包含任何throw; catch? 用户的详细资料很脆弱,因为我只是通过他的电子邮件得到他的信息,然后进行比较?

方法:

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

在此先感谢。

+2

而不是使用Spring Security的原因是什么? –

+0

@Branislav Lazic这个小小的学校项目是基于给予我们的模板,登录已经这样完成,但有很多错误,我们不得不“修复”。我将检查Spring安全性,看看它是否更易于使用和实施。也可以做对。 –

回答

0

我必须包含任何throw; catch?

最有可能的是,至少你loginRepository是candidats之一,因为它可能去到DB获取数据(从它是如何实现的依赖)。

用户的详细资料很脆弱,因为我只是通过他的电子邮件得到他的信息,然后进行比较?

请说明一下,“脆弱”是什么意思? (以上用相同的电子邮件,安全起见一个用户...)

备注代码:

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

感谢您的回复,是的,我的主要观点是,不止一个用户将拥有相同的电子邮件。我得看看那个。 –

+0

要照顾唯一的电子邮件约束(如果您要使用Spring安全性),您可以为用户指定自定义@Entity类,并使用@Column标记电子邮件字段(unique = true)。 – WeGa

+0

谢谢,我会研究这一点。 –