Отправка пароля процессу Java - PullRequest
0 голосов
/ 19 августа 2011

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

    public class SvnJavaTest{
            public static void main(String[] args){
                try {
                    String[] commands = {"svn", "ls", "https://svnserver"};
                    Process beginProcess = Runtime.getRuntime().exec(commands, null, new File("/home/users/ckorb/Desktop"));
                    BufferedReader br = new BufferedReader(new InputStreamReader(beginProcess.getInputStream()));
                    BufferedWriter write = new BufferedWriter(new OutputStreamWriter(beginProcess.getOutputStream()));
                    write.write("password");
                    write.flush(); 
                    String line=br.readLine();
                    while (line != null){
                            System.out.println(line);
                            line =br.readLine();
                    }
                    br.close();
                    write.close();
                    beginProcess.waitFor();
                } catch (IOException e1) {
                    e1.printStackTrace();
                } catch (InterruptedException ie) {
                    ie.printStackTrace();
                }
           }
    }

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

Ответы [ 3 ]

0 голосов
/ 19 августа 2011

Лучше использовать svn java API (их несколько, я не уверен, какой из них лучше), это более простое решение.Отвечая на ваш вопрос - вы можете предоставить информацию об аутентификации в URL: https://username:password@svnserver

0 голосов
/ 19 августа 2011

Основная проблема такого решения заключается в том, что вы не можете контролировать stdin и stdout.Злоумышленник может обернуть команду svn сценарием оболочки, который создает копию стандартного ввода (таким образом, захватывая все пароли, передаваемые вашей программой).Хотя гибкость оболочки делает ее великолепной во многих отношениях, она обеспечивает ту же гибкость, к которой вы подключаетесь, и вам будет лучше с ней (и с ее последствиями).Лучше использовать Java API для использования клиента, гораздо меньше шансов внедрить код, который собирает конфиденциальные данные (и лучше сообщает об ошибках).

0 голосов
/ 19 августа 2011

Вместо этого используйте библиотеку SVN Kit .

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