亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Servlet 上使用 HashMap 進行用戶驗證

在 Servlet 上使用 HashMap 進行用戶驗證

HUH函數 2021-11-17 15:11:11
我必須創建一個小應用程序,用戶在其中以 html 形式輸入他/她的用戶名和密碼,然后在具有用戶和密碼的 HashMap 的 servlet 中進行處理。HashMap 應該在 servlet 的 init 方法中使用一些用戶名和密碼進行初始化。我必須使用 HashMap 條目檢查用戶輸入,這就是我卡住的地方。我不知道如何將 HashMap 條目與用戶輸入的用戶名和密碼進行比較。我到目前為止的代碼如下:    public class User {    String username;    String password;    public User (String user, String pass){        this.username = user;        this.password = pass;    }    public String getUsername() {        return username;    }    public void setUsername(String username) {        this.username = username;    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }}import java.io.IOException;import java.util.HashMap;import java.util.Iterator;import java.util.Map.Entry;import javax.servlet.ServletConfig;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;@WebServlet("/AthorizationServlet")public class AthorizationServlet extends HttpServlet {    private static final long serialVersionUID = 1L;    public AthorizationServlet() {        super();    }    public void init(ServletConfig config) throws ServletException {        super.init(config);        HashMap<Integer, User> uc = new HashMap <Integer, User>(); {            uc.put(1, new User("user1", "pass1"));            uc.put(2, new User ("user2", "pass2"));            uc.put(3, new User ("user3", "pass3"));            uc.put(4, new User ("user4", "pass4"));        }        Iterator<Entry<Integer, User>> it = uc.entrySet().iterator();        while (it.hasNext()){            //some code to validate user input against HashMap entries        }    }    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {    }
查看完整描述

1 回答

?
catspeake

TA貢獻1111條經驗 獲得超0個贊

我想說你被卡住的原因是將用戶名字符串映射到密碼的 HashMap 需要一個HashMap<String, String> uc,但你已經創建了一個HashMap<Integer, User> uc,這消除了使用 HashMap 的價值!如果您打算利用 java.util.HashMap 提供的“優化”——這意味著字符串被“散列”以便在數據結構中快速輕松地查找,您可以按如下方式保存 HashMap:


HashMap<Integer, User> uc = new HashMap <Integer, User>(); {

    uc.put("user1", "pass1");

    uc.put("user2", "pass2");

    uc.put("user3", "pass3");

    uc.put("user4", "pass4");

}

以這種方式,您可以按如下方式查找用戶名和密碼組合:


public boolean checkPassword(String enteredUserName, String enteredPassword)

{

    String userPassword = uc.get(enteredUserName);

    return enteredPassword.equals(userPassword);

}

如果您絕對必須在 HashMap 中使用“用戶”數據結構,另一種選擇是:


    HashMap<Integer, User> uc = new HashMap <Integer, User>(); {

        uc.put("user1", new User("user1", "pass1"));

        uc.put("user2", new User ("user2", "pass2"));

        uc.put("user3", new User ("user3", "pass3"));

        uc.put("user4", new User ("user4", "pass4"));

    }

此時獲取密碼可能如下所示:


public boolean checkPassword(String enteredUserName, String enteredPassword)

{

    String userPassword = uc.get(enteredUserName).getPassword();

    return enteredPassword.equals(userPassword);

}

我不確定您用來啟動的“整數”(用戶 ID?)是什么HashMap<Integer, User>-但是- 要意識到的最重要的事情是 HashMap 的目的是在表中“查找”要快得多,因為對查找值執行“哈?!焙瘮怠?/p>


如果您不打算使用“用戶 ID 整數”進行查找,那么將其存儲為 HashMap 的鍵根本沒有多大用處。


您的迭代器必須遍歷整個表才能找到用戶:


public boolean checkPassword(String enteredUserName, String enteredPassord)

{

        Iterator<Entry<Integer, User>> it = uc.entrySet().iterator();

        while (it.hasNext()){

            //some code to validate user input against HashMap entries

            User u = it.next().getValue();

            if (u.getUserName().equals(enteredUserName())

                return u.getPassword().equals(enteredPassword);

        }


}


查看完整回答
反對 回復 2021-11-17
  • 1 回答
  • 0 關注
  • 212 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號