Авторизация Google с использованием OAuth2 - PullRequest
0 голосов
/ 22 октября 2018

Я использую Google OAuth2, чтобы разрешить моему веб-приложению использовать API Google Analytics.Я использовал следующие зависимости для достижения этой цели.

    <dependency>
        <groupId>com.google.apis</groupId>
        <artifactId>google-api-services-analytics</artifactId>
        <version>v3-rev159-1.25.0</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.google.oauth-client/google-oauth-client-jetty -->
    <dependency>
        <groupId>com.google.oauth-client</groupId>
        <artifactId>google-oauth-client-jetty</artifactId>
        <version>1.26.0</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.google.oauth-client/google-oauth-client-java6 -->
    <dependency>
        <groupId>com.google.oauth-client</groupId>
        <artifactId>google-oauth-client-java6</artifactId>
        <version>1.26.0</version>
    </dependency>

Во время тестирования я обнаружил, что Jetty Server всегда запускает сервер на указанном нами порту (т.е. я дал 8080).

Если порт уже запущенмоим приложением выдает ошибку.

Может кто-нибудь предложить способ?Я искал решение по всему Интернету, но все тщетно.

Кодовая секция вызова сервера приведена ниже

/** Authorizes the installed application to access user's protected data. */
private static Credential authorize() throws Exception {
    // load client secrets
    GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(
            JSON_FACTORY, new InputStreamReader(
                    test.class.getResourceAsStream("/client_secrets.json")));

    // set up authorization code flow
    GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
            httpTransport, JSON_FACTORY, clientSecrets,
            Collections.singleton(AnalyticsScopes.ANALYTICS_READONLY)).setAccessType("offline").setDataStoreFactory(
            dataStoreFactory).build();
    // authorize
    LocalServerReceiver localServerReceiver=new LocalServerReceiver.Builder().setHost("localhost").setPort(8080).setCallbackPath("/google/connect/return").setLandingPages(null,null).build();
    return new AuthorizationCodeInstalledApp(flow, localServerReceiver).authorize("user12009");
}

То есть LocalServerReceiver.

Я приложил журнал ошибок:

Caused by: java.net.BindException: Address already in use (Bind failed)
at java.net.PlainSocketImpl.socketBind(Native Method)
at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:387)
at java.net.ServerSocket.bind(ServerSocket.java:375)
at java.net.ServerSocket.<init>(ServerSocket.java:237)
at org.mortbay.jetty.bio.SocketConnector.newServerSocket(SocketConnector.java:80)
at org.mortbay.jetty.bio.SocketConnector.open(SocketConnector.java:73)
at org.mortbay.jetty.AbstractConnector.doStart(AbstractConnector.java:283)
at org.mortbay.jetty.bio.SocketConnector.doStart(SocketConnector.java:147)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at org.mortbay.jetty.Server.doStart(Server.java:235)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)

Эта ошибка возникает, поскольку порт уже используется Моим приложением.Есть ли способ настроить сервер Jetty, чтобы ему не нужно было снова запускать порт?Или кто-нибудь может предложить другой способ реализовать это?

1 Ответ

0 голосов
/ 23 октября 2018

Если вы прочитаете определение класса в https://developers.google.com/api-client-library/java/google-oauth-java-client/reference/1.20.0/com/google/api/client/extensions/jetty/auth/oauth2/LocalServerReceiver.Builder,, вы увидите, что вы можете установить порт на -1, чтобы найти неиспользуемый порт.

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