Como autenticar usuários com Java no ambiente padrão do App Engine

Esta parte do tutorial do Bookshelf para Java mostra como criar um fluxo de login para usuários de Contas do Google e como usar as informações de perfil para proporcionar uma funcionalidade personalizada aos usuários com o serviço para usuários do App Engine.

Esta página faz parte de um tutorial com várias páginas. Para começar do início e ver as instruções de configuração, acesse App Bookshelf para Java.

Como executar o aplicativo na máquina local

Para executar o app localmente:

  1. No diretório getting-started-java/bookshelf-standard/4-auth, digite o seguinte comando para iniciar um servidor da Web local:

    mvn -Plocal clean appengine:devserver -Dbookshelf.bucket=[YOUR-BUCKET]
    Substitua [YOUR_BUCKET] pelo nome do seu intervalo.
  2. No seu navegador, acesse http://localhost:8080.

Agora, navegue nas páginas da Web do app, faça login usando sua Conta do Google e adicione livros. Para vê-los, basta usar o link Meus Livros na parte superior da barra de navegação.

Como implantar o app no ambiente padrão do App Engine

Para implantar no ambiente padrão do App Engine:

  1. Faça um teste completo do aplicativo Bookshelf localmente, inclusive com a criação de pelo menos um livro e um clique em Meus livros. Com isso, você cria um índice obrigatório de Cloud Datastore que é carregado com o Bookshelf. Observe que o índice local será excluído se você criar o aplicativo usando clean. Assim, faça isso na versão do aplicativo que você vai implantar.
  2. No diretório getting-started-java/bookshelf-standard/4-auth, insira este comando para implantar o app:
    mvn appengine:update -Dappengine.appId=[YOUR-PROJECT-ID] -Dappengine.version=[YOUR-VERSION] -Dbookshelf.bucket=[YOUR-BUCKET].appspot.com
    Substitua [YOUR-PROJECT-ID] pelo código do projeto e [YOUR-VERSION] pela versão, por exemplo, 1, 2 ou outro valor de string que você queira usar.
  3. No navegador da Web, digite este endereço.
    https://[YOUR-PROJECT-ID].appspot.com
    Substitua [YOUR-PROJECT-ID] pelo código do projeto.

Depois de atualizar o app, você poderá implantar novamente a versão atualizada inserindo o mesmo comando usado para implantar o app na primeira vez, especificando o mesmo código de projeto e versão, substituindo assim o app implantando atualmente. Se você especificar uma string de versão diferente na linha de comando de atualização, a nova implantação criará uma nova versão do seu app e a definirá como a versão atual em veiculação.

Reduza custos excluindo as versões do app que não estão veiculadas.

Para excluir uma versão do aplicativo:

  1. No Console do GCP, acesse a página "Versões do App Engine".

    Acessar a página Versões

  2. Clique na caixa de seleção ao lado da versão do aplicativo não padrão que você quer excluir.
  3. Clique no botão Excluir na parte superior da página para excluir a versão do aplicativo.

Para informações detalhadas sobre a remoção de recursos faturáveis, consulte a seção Como fazer a limpeza na etapa final deste tutorial.

Estrutura do aplicativo

Veja no diagrama os componentes do aplicativo e como eles se conectam.

Amostra de estrutura de autenticação

Como entender o código

Nesta seção, vamos analisar o código do aplicativo e explicar como ele funciona.

Quando o usuário clica em Login, o LoginServlet é invocado e faz o seguinte:

  1. Determina se o usuário está conectado no momento em uma Conta do Google, e, se tiver, salva o endereço de e-mail e a informação de identificação na sessão atual.

  2. Se não estiver conectado em uma Conta do Google, o usuário é redirecionado a uma página de login de Contas do Google. O serviço Usuários do App Engine lida com a maior parte das complexidades do login do usuário.

@SuppressWarnings("serial")
public class LoginServlet extends HttpServlet {
  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp)
      throws IOException, ServletException {

    UserService userService = UserServiceFactory.getUserService();
    if (userService.isUserLoggedIn()) {
      // Save the relevant profile info and store it in the session.
      User user = userService.getCurrentUser();
      req.getSession().setAttribute("userEmail", user.getEmail());
      req.getSession().setAttribute("userId", user.getUserId());

      String destination = (String) req.getSession().getAttribute("loginDestination");
      if (destination == null) {
        destination = "/books";
      }

      resp.sendRedirect(destination);
    } else {
      resp.sendRedirect(userService.createLoginURL("/login"));
    }
  }
}

LogoutServlet exclui session e cria uma nova:

@SuppressWarnings("serial")
public class LogoutServlet extends HttpServlet {

  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp)
      throws IOException, ServletException {
    // you can also make an authenticated request to logout, but here we choose to
    // simply delete the session variables for simplicity
    HttpSession session =  req.getSession(false);
    if (session != null) {
      session.invalidate();
    }
    // rebuild session
    req.getSession();
  }
}
Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…