2010-10-29 160 views
-1

我在做密碼驗證時遇到了麻煩。我將Java類的密碼範圍的最小值和最大值稱爲applicationconstants,並在servlet中調用它。我在另一個java類中使用驗證函數並在servlet中調用它。請幫我解決這個問題。密碼驗證問題

servlet代碼

int minLength = ApplicationConstants.PASSWORD_MIN_LENGTH; 
int maxLength = ApplicationConstants.PASSWORD_MAX_LENGTH; 

if (user.getUserPassword().length() > 0 || user.getUserPassword() !=null) { 
      if (Validation.validateStringLengthRange(user.getUserPassword(), minLength, maxLength)) { 
      System.out.println("servlet"); 
       isvalidate = false; 
       hashMap.put("password", props.getText("error.password.compare.outofrange")); 
       session.setAttribute("errorMessage", hashMap); 
      } 
    } 

Validation.java

public static boolean validateStringLengthRange(String name, int min, int max) { 
     boolean isValid = true; 
     int len = name.length(); 
     if (len > 0) { 
      if (len < min || len > max) { 
       System.out.println("validation.java"); 
       isValid = false; 
      } 
     } 
     return isValid; 
    } 

ApplicationConstants.java

public static final int PASSWORD_MIN_LENGTH = 6; 
public static final int PASSWORD_MAX_LENGTH = 18; 
+2

嗯,很多在那裏的話,但絕對沒有跡象表明什麼問題實際上_is._認真,這將有很大幫助:-) – paxdiablo 2010-10-29 14:25:37

+0

如果我給密碼長度超過6和小於18它不是採取,但它顯示驗證錯誤消息哪我已經在代碼中給出了。它告訴驗證失敗。它實際上是從應用程序常量中獲取值並對其進行比較,但我的目標是隻需要6至18個字符的密碼。希望您現在站在 – yopirates 2010-10-29 14:30:15

+0

有趣的是,@約翰,它從來沒有被稱爲零長度密碼,由於servlet代碼:-) – paxdiablo 2010-10-29 14:30:47

回答

5

盲試,因爲隨着paxdiablo說你不指定有問題

如果問題是,你得到一個NullPointerException,請仔細檢查此行

if (user.getUserPassword().length() > 0 || user.getUserPassword() !=null) { 

,並更改爲

if (user.getUserPassword() !=null && user.getUserPassword().length() > 0) { 

這應該解決它;)

+2

這是一個非常棒的捕獲+1。 – paxdiablo 2010-10-29 14:30:02

+0

nope它沒有解決我的問題 – yopirates 2010-10-29 14:44:41

+0

我有疑問是它採取加密密碼進行驗證? – yopirates 2010-10-29 14:47:13

2
Validation.validateStringLengthRange(user.getUserPassword(), minLength, maxLength)) 

返回true,如果它是有效的。所以,你會想要把一個錯誤信息,如果它是無效的:

if (!Validation.validateStringLengthRange(user.getUserPassword(), minLength, maxLength)) { 
isvalidate = false; 

注意!

+0

我懷疑它是否將加密的密碼用於驗證? – yopirates 2010-10-29 14:45:57

+0

@yopirates - 運行測試,看看它是否? – Ishtar 2010-10-29 14:59:43

1

好了,所以validateStringLengthRange返回true如果密碼驗證,但你似乎是調用您的錯誤邏輯,如果結果是真實的 - 是否缺少一個「不」操作,即應Validation.validateStringLengthRange!Validation.validateStringLengthRange

此外,你需要做的空校驗之前檢查長,我想即使輸入爲空它應該是一個錯誤,那麼怎麼樣:

String password = user.getUserPassword(); 
if (password == null || password.length() == 0 || 
    !Validation.validateStringLengthRange(password, minLength, maxLength)) { 
     System.out.println("servlet"); 
     isvalidate = false; 
     hashMap.put("password", props.getText("error.password.compare.outofrange")); 
     session.setAttribute("errorMessage", hashMap); 
} 
+0

我有疑問是否將驗證的加密密碼? – yopirates 2010-10-29 14:42:00

+0

+1偉大的思想家都一樣。 – Ishtar 2010-10-29 14:58:22