Временное перенаправление с клиентским API JAX-RS - PullRequest
1 голос
/ 07 февраля 2020

Я пытаюсь интегрировать мой текущий проект с внешним API аутентификации, и сейчас моя цель - это перенаправление на внешний URL:

https://auth.mercadolivre.com.br/authorization?response_type=code&client_id=$APP_ID

, где происходит процесс авторизации, после чего он перенаправляется обратно к моему приложению с таким URL:

http://YOUR_REDIRECT_URI?code=SERVER_GENERATED_AUTHORIZATION_CODE

, где мне нужно хранить внутреннюю переменную code.

Я получил этот код до сих пор, основываясь на доступных примерах здесь и здесь :

public String getCode() throws ApiException, URISyntaxException {
  Client client = ClientBuilder.newClient();
  WebTarget resourceTarget = client.target(getApi().getLocation());

  // Build a HTTP GET request that accepts "text/plain" response type
  // and contains a custom HTTP header entry "Foo: bar".
  Invocation invocation = resourceTarget.request("text/plain").buildGet();

  // Invoke the request using generic interface
  String response = invocation.invoke(String.class);
  return response;
}

@POST
public Response getApi() throws ApiException, URISyntaxException {
  getAuthUrl();
  URI targetURIForRedirection = new URI(auth_url);
  return Response.temporaryRedirect(targetURIForRedirection).build();
}

Но, несмотря на то, что приложение достигает пункта назначения, вместо открытия в браузере, html выводится на консоль и выдается ошибка (что-то вроде недопустимого символа в коде, выведенном на консоль).

Я просто хочу, из приведенных выше методов, перенаправить пользователя на страницу авторизации (первая ссылка), и когда процесс заканчивается, выполните оставшуюся часть кода, сохраняя значение, возвращаемое для использования в будущем.

Для справки, этот код вызывается из AuthenticationManager в моем Spring-Sec слой урти. Реализация, которую я получил до сих пор:

@Configuration
@EnableWebSecurity
public class Security extends WebSecurityConfigurerAdapter {
  @Bean
  @Override
  public AuthenticationManager authenticationManagerBean() throws Exception {
    return new AuthManager();
  }

  @Override
  public void configure(HttpSecurity http) throws Exception {
...
  }

  @Override
  public void configure(WebSecurity web) throws Exception {
...
  }

  public class AuthManager implements AuthenticationManager {
    @Override
    public Authentication authenticate(Authentication authentication) throws AuthenticationException {
      MercadoLivre mercadoLivre = new MercadoLivre();
      try {
        mercadoLivre.getAccessToken();
        UserResponse data = (UserResponse) mercadoLivre.GET("/users/"+mercadoLivre.getUserId().toString());
        return new AuthResponse(data);
      } catch (Exception e) {
        e.printStackTrace();
        return null;
      }
    }
  }

  public class AuthResponse implements Authentication {
...
  }
}

метод вызывается изнутри getAccessToken().

...