2016-02-25 70 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

謝謝,我會研究這一點。 –