Как коду менеджера зарегистрировать Кассу с именем пользователя и паролем в Java NetBeans (GUI) с проверкой логина для Кассира - PullRequest
0 голосов
/ 17 июня 2019

Это банковская система, и мне нужно создать два уровня пользователя, Менеджер и Кассир. Я должен предоставить имя пользователя и пароль для менеджера, а менеджер должен предоставить имя пользователя и пароль для кассира. Я не совсем уверен, как проверить код для входа в cahsier. Это должно быть закодировано в Java в среде IDE Netbeans (GUI)

Ответы [ 3 ]

0 голосов
/ 19 июня 2019

Моя точка зрения вызывает озабоченность, так как ваш вопрос требует от вас базового понимания Java.Я не уверен, храните ли вы свои регистрационные данные в базе данных или в текстовом файле.Если вы храните данные в базе данных, вы можете просто использовать обычные методы проверки Java, описанные ниже:

  1. Получить имя пользователя и пароль от кассира.
  2. Выбрать записисовпадают с именем пользователя и паролем, которые вы ввели выше из базы данных.
  3. Распечатайте сообщение, если количество записей, которое вы соответствуете, равно нулю.
  4. Войдите в кассу, если введенные записи совпадаютте, которые хранятся в базе данных.Пожалуйста, обратитесь к здесь для получения дополнительной информации о подключении к базе данных и хранении / извлечении пользовательских данных с использованием Java.

Также обратите внимание, что банковские приложения должны быть более безопасными и, следовательно, лучшимиПрактика заключается в том, чтобы хранить засеченные хеши паролей и использовать криптографически надежную функцию хеширования.

Если вы сохраняете свои данные в текстовом файле, вы можете обратиться к этому образцу кода .Вы можете прочитать больше о Java Scanner Class здесь .Вы также можете использовать карту для сопоставления всех пользователей при регистрации, а затем просто проверить карту, чтобы подтвердить данные для входа.

N / B: во всех этих случаях проверьте, если поля имени пользователя и пароля являютсяпусто, прежде чем отправлять детали.

0 голосов
/ 19 июня 2019

Если бы это было реальное приложение, вы бы сохраняли имена пользователей и хешированные и засоленные версии паролей на диске (или вы запрашивали бы их по сети), в идеале, используя bcrypt , pbkdf2 , или другая надежная и обновляемая схема хэширования паролей.Есть несколько библиотек с открытым исходным кодом, которые реализуют их для вас.

Поскольку это, по-видимому, упражнение по программированию, вопрос о том, как их хранить, вероятно, был задан тем, кто его написал, и поэтому безопасность может быть минимальной.

Самый простой способ (который не являетсяБезопасность вообще) для реализации этого необходимо сохранить файл паролей.Вы можете, например, использовать что-то похожее на следующий код:

public class InsecurePasswordStore {
    private Map<String, String> passwords = new HashMap<>();

    public void setPassword(String user, String password) {
        passwords.put(user, password);
    }

    public boolean isPasswordCorrect(String user, String password) {
        return passwords.get(user) != null && passwords.get(user).equals(password);
    }

    public void save(File file) throws IOException {
        try (PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(file)))) {
            for (Map.Entry<String, String> e: passwords.entrySet()) {
                writer.println(e.getKey());
                writer.println(e.getValue());
            }
        }
    }

    public void load(File file) throws IOException {
        passwords.clear();
        try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
            boolean finished = false;
            while ( ! finished) {
                String user = reader.readLine();
                String password = reader.readLine();
                if (user == null || password == null) {
                    finished = true;
                } else {
                    passwords.put(user, password);
                }
            }
        }
    }

    public static void main(String[] args) throws IOException {

        InsecurePasswordStore store = new InsecurePasswordStore();
        File passwordFile = new File("secrets.txt");

        // create initial password file before first run
        store.setPassword("manager", "12345");
        store.save(passwordFile);

        // load file when the app is launched
        store.load(passwordFile);

        // check password for a user
        String badGuess = "2345";
        System.out.println("Is " + badGuess
                + " the correct password for the manager? " + store.isPasswordCorrect("manager", badGuess));
        String goodGuess = "12345";
        System.out.println("Is " + goodGuess
                + " the correct password for the manager? " + store.isPasswordCorrect("manager", goodGuess));

        // if the password was correct, set another username-password pair
        if (store.isPasswordCorrect("manager", goodGuess)) {
            store.setPassword("cashier", "abcde");
        }
        store.save(passwordFile);
    }
 }
0 голосов
/ 19 июня 2019

Мой ответ - это скорее серия вопросов и предложений, чтобы вы подумали, как это сделать.Кроме того, я не могу быть очень конкретным, потому что вы предоставили очень мало деталей в своем вопросе.

Вопрос 1, после того, как ваш менеджер введет данные кассира, где вы храните их?В памяти?В файле?В базе данных?Что-то еще?

Вопрос 2, при проверке логина кассира, почему бы вам не проверить данные кассира в этой базе данных / файле / памяти?Ответ в том, что вы должны проверить свои учетные данные кассира по месту их хранения.

Также, для чего бы это ни стоило, вы должны никогда жестко кодировать вход (например,менеджер) в приложение (даже для тестирования).Почему?

  1. Невозможно избавиться от него, не выпустив новую версию программного обеспечения.
  2. Это угроза безопасности (по причине 1).
  3. Если вы делаете это в ходе тестирования, вполне возможно, что вы забудете удалить его до выпуска кода.Тогда применяется причина 2.
  4. В этом нет необходимости - вы можете просто «заполнить» свое хранилище пользователей единственной записью, представляющей логин и пароль по умолчанию для менеджера (в идеале с указанием «пароль истек») вваш дистрибутив или , если у вас есть установщик, попросите человека, выполняющего настройку, создать логин менеджера в процессе установки.

Поэтому способ проверки учетных данных менеджера будетбудет точно таким же, как и все остальные.

Это будет (должно) иметь преимущество более простой программы, которую будет легче поддерживать.

И на всякий случай, как вы скажете разницумежду менеджером, кассиром, супервайзером или любыми другими типами пользователей, которые у вас могут быть (или понадобятся в будущем) через роль.В вашем хранилище пользовательских данных есть поле, которое определяет, в какой роли пользователь (например, менеджер, кассир и т. Д.).Другая модель - это «несколько полей», где вы указываете, что пользователь имеет эту роль (и, следовательно, имеет доступ к связанной функции или нет).Например, у вас могут быть роли менеджера, руководителя, кассира, бэк-офиса и т. Д.Затем просто укажите значение true / false в своей записи пользователя, которое указывает, может ли этот пользователь получить доступ к функциям, связанным с определенной ролью.

Наконец, ваша программа упрощается, поскольку ваша логика теперь просто

if user has manager role then display manager menu
if user has supervisor role then display supervisor menu"
etc

Обратите внимание, что в приведенном выше коде псевдо нет else.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...