0

独自の認証を作成しようとしています。ログインしようとするたびに、GAEデータストアにユーザー名が見つからない場合、INTERNAL_SERVER_ERRORが発生します。

それはそれを言います:

java.lang.NullPointerException
at com.pawnsoftware.User.authenticate(User.java:16)
at com.pawnsoftware.UserLoginServlet.doPost(UserLoginServlet.java:24)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)

等々...

このエラーを回避するにはどうすればよいですか?

エラーは次の行にあります。

if (user==null) {
    message = "Username not found.";
}

ユーザーの認証:

public static String authenticate(String username, String password) {
    String message;
    Entity user = UserUtil.findUserEntity(username);
    String pass = user.getProperty("password").toString();
    if (user==null) {
        message = "Username not found.";
    } else if (user!=null && !password.equals(pass)) {
        message = "Password is incorrect.";
    } else if (user!=null && password.equals(pass)) {
        message = "Successfully logged in!";
    } else {
        message = "Sorry, cannot find the username and password.";
    } 
    return message;
}

ユーザーエンティティの検索:

public static Entity findUserEntity (String username) {
    Key userKey = KeyFactory.createKey("User", username);
    try {
      return datastore.get(userKey);
    } catch (EntityNotFoundException e) {
      return null;
    }
}

認証に関する更新:

public static String authenticate(String username, String password) {
    String message;
    Entity user = UserUtil.findUserEntity(username);
    password = encrypt(password);
    String pass = "";   
        try {
            pass = user.getProperty("password").toString();
        } catch (NullPointerException e) {
            message = "Username not found.";
        }
    if (user==null) {
        message = "Username not found.";
    } else if (user!=null && !password.equals(pass)) {
        message = "Password is incorrect.";
    } else if (user!=null && password.equals(pass)) {
        message = "Successfully logged in!";
    } else {
        message = "Sorry, cannot find the username and password.";
    } 
    return message;
}
4

2 に答える 2

0

use が null の場合、次の行は失敗します。

String pass = user.getProperty("password").toString();
于 2012-10-03T22:52:03.840 に答える
0

getEntityNotFoundExceptionと returnを取得した場合は表示されませんnull。これにより、NullPointerException変数の a が発生する可能性がありますuser

user.getProperty("password").toString();

ここにガード ステートメントを追加できます。

if (user != null) {
   pass = user.getProperty("password").toString();
}
于 2012-10-03T22:55:42.110 に答える