Как использовать API-соединение после авторизации?Джава - PullRequest
0 голосов
/ 20 января 2019

Технически говоря, у меня запущена авторизация, и моя программа может использовать созданный BoxAPIConnection для загрузки / выгрузки из облачного хранилища. Но я могу заставить его работать только в этой части:

public void loginButtonClicked() throws IOException, URISyntaxException
{

     if (Desktop.isDesktopSupported() && Desktop.getDesktop().isSupported(Desktop.Action.BROWSE)) {
            Desktop.getDesktop().browse(new URI("http://localhost:4567/start"));
        }

     get("/start", (req, res) -> {

            // Redirect user to login with Box
                String box_redirect = ConfigAuth.box_redirect
                  + "?response_type=code"
                  + "&client_id=" + ConfigAuth.client_id 
                  + "&client_secret=" + ConfigAuth.client_secret
                  + "&redirect_uri=" + ConfigAuth.redirect_uri;

                res.redirect(box_redirect);
                return "redirecting...";
            });



     get("/return", (req, res) -> {
             // Capture authentication code 
             String code = req.queryParams("code");


      // Instantiate new Box API connection object
       BoxAPIConnection api = new BoxAPIConnection(ConfigAuth.client_id,ConfigAuth.client_secret,code);

      String rootID = "0";
        String targetDir = "F:\\eclipse\\khjbgl\\Downloaded Files\\"; 
        DownloadAll(rootID, targetDir, api);


      return "display page";  
         });

Эта кнопка предназначена только для входа в систему и авторизации Программного обеспечения, поэтому она не должна сразу загружать что-либо. Теперь актуальная проблема: если я вызываю функцию загрузки в другом месте, то я не могу получить доступ к API BoxAPIConnection, созданному в процессе входа в систему. API находится локально в части аутентификации, но я также нуждаюсь в других функциях. Я попытался сохранить состояние подключения API в файле, а затем восстановить его в функции загрузки, но это дает мне исключение json.ParseException.

public void loginButtonClicked() throws IOException, URISyntaxException
{

     if (Desktop.isDesktopSupported() && Desktop.getDesktop().isSupported(Desktop.Action.BROWSE)) {
            Desktop.getDesktop().browse(new URI("http://localhost:4567/start"));
        }

     get("/start", (req, res) -> {

            // Redirect user to login with Box
                String box_redirect = ConfigAuth.box_redirect
                  + "?response_type=code"
                  + "&client_id=" + ConfigAuth.client_id 
                  + "&client_secret=" + ConfigAuth.client_secret
                  + "&redirect_uri=" + ConfigAuth.redirect_uri;

                res.redirect(box_redirect);
                return "redirecting...";
            });



     get("/return", (req, res) -> {
             // Capture authentication code 
             String code = req.queryParams("code");


      // Instantiate new Box API connection object
       BoxAPIConnection api = new BoxAPIConnection(ConfigAuth.client_id,ConfigAuth.client_secret,code);
       JSONParser parser = new JSONParser();
       JSONObject obj = (JSONObject) parser.parse(api.save());
      FileWriter file = new FileWriter("API.txt");
      try {
          file.write(obj.toJSONString());
          System.out.println("successfully copied json object to file");
          System.out.println("\nJSON Object: " + obj);
      } catch (IOException e)
      {
          e.printStackTrace();
      }
      finally {
          file.flush();
          file.close();
      }
      //String rootID = "0";
        //String targetDir = "F:\\eclipse\\khjbgl\\Downloaded Files\\"; 
        //DownloadAll(rootID, targetDir, api);


      return "display page";  
         });


}


public void DownloadAllClick (ActionEvent event) throws FileNotFoundException, IOException {

    File file = new File ("API.txt");
    BufferedReader br = new BufferedReader(new FileReader(file));
    StringBuilder sb = new StringBuilder();
    String line = null;
    String ls = System.getProperty("line.seperator");
    while ((line = br.readLine()) != null) {
        sb.append(line);
        sb.append(ls);
    }
    //sb.deleteCharAt(sb.length() -1);
    br.close();
    String apiString = sb.toString();

        BoxAPIConnection api = BoxAPIConnection.restore(ConfigAuth.client_id, ConfigAuth.client_secret, apiString); 
    String rootID = "0";
    String targetDir = "F:\\eclipse\\khjbgl\\Downloaded Files\\"; 
    DownloadAll(rootID, targetDir, api);
}

Как использовать созданные API в других моих функциях, не предлагая пользователю снова авторизовать все программное обеспечение?

1 Ответ

0 голосов
/ 05 апреля 2019

Создайте кэш уровня JVM (HashMap) и сохраните в нем apiconnection.После сохранения используйте это соединение до тех пор, пока оно не истечет.После истечения времени соединения (приблизительно) удалите старый API из кэша и сохраните новый.

...