0

Javaプログラムで使用するユーザー名とパスワードを保持するプロパティファイルがありますが、データベースのように複数のユーザー名とパスワードを保存することはできず、ユーザー名とパスワードがデータベース内の多くの行と一致する場所を選択するだけです. ユーザー名と対応するパスワードを保持するファイルに2次元配列を保存する必要があると思いますが、その方法を理解できず、Googleも2次元配列をファイルに保持する方法を教えてくれませんでしたまだ。ファイル内のユーザー名とパスワードのキーと値のペアは次のとおりです

    `password=k
     username=k`

そして、それらを読み取り、ユーザーが挿入したものと比較するコードは次のとおりです

   `String usr = userfield.getText();
    String pwd = new String(pwdfield.getPassword());
    Properties config = new Properties();
    InputStream is;

    try {

        is = new FileInputStream("config.properties");
        config.load(is);

        if (usr.toString().equals(config.getProperty("user").toString()) && pwd.toString().equals(config.getProperty("pass").toString())) {
            new DocMenu();
            lgFrame.dispose();

        } else {
            JOptionPane.showMessageDialog(lgFrame, "Wrong credentials try again", "Oops", JOptionPane.ERROR_MESSAGE);

        }

        is.close();

    } catch (Exception ex) {
        System.out.println(ex);
        ex.printStackTrace();
    }`

ユーザー名とパスワードが存在する限り、ファイルに複数のユーザー名とパスワードを指定して、すべてのユーザーにアクセスを許可できるように、プロパティ ファイルとコードを変更する方法を教えてください。

4

4 に答える 4

1

プロパティ名をユーザー名とキーの連結として保存し、パスワードを次のような値として保存する場合。

#Some bad passwords
username.bob=password
username.scott=tiger
username.admin=admin

..次に、このように確認できます。

String password = config.getProperty("username." + usr.toString());
if (password != null && password.equals(pwd.toString())) {
  new DocMenu();
  lgFrame.dispose();
} else {
  JOptionPane.showMessageDialog(lgFrame, "Wrong credentials try again", "Oops", JOptionPane.ERROR_MESSAGE);
}
于 2012-10-16T12:47:09.970 に答える
1

投稿されたコードでは、プロパティに「ユーザー名」があり、「ユーザー」プロパティを読み取ろうとしています。パスワードも同様です。

ただし、これでは、user/pwd のペアを 1 つだけ持つことができます。プロパティ ファイルには、より複雑な構造が必要です。たとえば、あなたが持つことができます

user1=pwd1
user2=pwd2
...

そして、次のようなもので確認してください:

if (password != null && password.equals(config.getProperty(usr)){
 // ok ...
}
于 2012-10-16T12:52:02.000 に答える
0

プロパティを使用する必要がある場合は、実行する以外に選択肢はほとんどないと思います

username.1
username.2
username.3

そして、プロパティが見つからないインデックス(この場合はusername.4)ができるまで繰り返します。

より複雑な構成については、要素のリストを処理できるApacheCommonsConfigなどのフレームワークを調査します。

于 2012-10-16T12:48:31.037 に答える
0

約束どおり、HashSetのシリアル化/逆シリアル化コードは次のとおりです。

import java.util.*;
import java.io.*;

class UserPasswordMap{
   private HashMap<String,String> userMap;
   private String m_filename;
   public UserPasswordMap()
   {
       userMap = null;
       m_filename = null;
       userMap = new HashMap<String,String>();
   }

   public UserPasswordMap(String filename, String credo)
   {
       try{
          m_filename = filename;
          File f = new File(m_filename);
          userMap = new HashMap<String,String>();
          if(f.exists() && (!(f.canRead() && f.canWrite()))){ 
              System.err.println("Oops, Insufficient permissions to read/write for filename: "+m_filename);
          }else{
              f.createNewFile();
          }
       }catch(Exception e){
           System.err.println(e.getMessage());
       }

       if(credo.equals("D")){
           try{
           ReadMap(filename);
           }catch(Exception e){ System.err.println(e.getMessage());}
       }
   }
   public void ReadMap(String filename) throws IOException, ClassNotFoundException
   {
       FileInputStream fis = new FileInputStream(filename);
       ObjectInputStream ois = new ObjectInputStream(fis);
       userMap = (HashMap<String,String>)ois.readObject();
       fis.close();
   }

   public void WriteMap(String filename) throws IOException{
       FileOutputStream fos = new FileOutputStream(filename);
       ObjectOutputStream oos = new ObjectOutputStream(fos);
       oos.writeObject(userMap);
       oos.close();
   }

   public ArrayList<String> getUsers()
   {
       ArrayList<String> users = new ArrayList<String>();
       if(userMap == null){
           return null;/*or return users*/
       }else{
           for(String s:userMap.keySet()){
               users.add(s);
           }
       }
       return users;
   }

   public ArrayList<String> getPasswords()
   {
       ArrayList<String> passwords = new ArrayList<String>();
       if(userMap == null){
           return null;/*or return users*/
       }else{
           for(String s:userMap.values()){
               passwords.add(s);
           }
       }
       return passwords;
   }

   public String getPassword(String username)
   {
       return userMap.get(username);
   }

   public void addUser(String username, String password){
       userMap.put(username, password);
       try{
           WriteMap(m_filename);
       }catch(Exception e){
           System.err.println(e.getMessage());
       }
   }

   public void saveData(){
       if(m_filename == null){
           System.err.println("File-Name is not supplied");
       }else{
           try{
              WriteMap(m_filename);
           }catch(Exception e){
               System.err.println(e.getMessage());
           }
       }
   }
}

そしてテストコード:

public class Main{
    private UserPasswordMap map;
    public static void main(String[] args){
       Main obj = new Main();
       obj.init();
       Scanner scan = new Scanner(System.in);
       System.out.println("0. Init With Serialisation(CAN THROW ERROR)");
       while(true){
          System.out.println("1. Add New User");
          System.out.println("2. Query Permissions");
          System.out.println("3. Exit");
          int data = scan.nextInt();
          switch(data){
          case 0: obj.initWithSerialisation();
          break;
          case 1: obj.addNewUser();
          break;
          case 2: obj.queryPerms();
          break;
          case 3: System.exit(0);
          }
       }
    }

    public void init()
    {
         map = new UserPasswordMap("try1.ser","");
    }

    public void initWithSerialisation()
    {
        map = new UserPasswordMap("try1.ser","D");
    }
    private Scanner scan;
    public void addNewUser()
    {
        System.out.print("Enter User:");
        scan = new Scanner(System.in);
        String username = scan.nextLine();
        System.out.print("Enter Pass:");
        String password = scan.nextLine();
        map.addUser(username, password);
    }

    public void queryPerms()
    {
        System.out.print("Enter User:");
        if(scan == null){ scan = new Scanner(System.in);}
        String username = scan.nextLine();
        System.out.print("Enter Pass:");
        String pass = scan.nextLine();

        if(map.getUsers().contains(username) && map.getPassword(username).equals(pass)){
            System.out.println("authenticated!");
        }else{
            System.out.println("Oops Wrong credentials!");
        }
    }
}
于 2012-10-16T13:42:44.103 に答える