Agente Java WebService A2A
Neste documento utilizaremos a biblioteca Java como exemplo. Todas bibliotecas utilizam do mesmo canal REST para comunicação com o Segura® , facilitando o desenvolvimento em qualquer linguagem que tenha suporte a webservice REST.
Este SDK disponibiliza acesso a credenciais (com recurso de cache) e conexão de banco de dados.
Os bancos de dados suportados para conexão atualmente são: MySQL, Oracle e PostgreSQL.
Os dados retornados pela API são os dados do Dispositivo e Credencial.
Atividades
Nesta seção, iremos abordar as seguintes funções do Segura® :
- 
Operação da biblioteca Java 
- 
Versões Java compatíveis com o agente 
- 
Configurações do Segura® 
- 
Exemplos de uso 
- 
Chamada de API via WebService 
Versões compatíveis do Java
O agente Java Lib 0.1.5 é compatível com a versão Java 1.5 ou superior, o que permite o cache das senhas do agente, evitando assim consultas no cofre.
A versão 0.1.4 do agente é compatível com versões inferiores do Java 1.5, mas não fornece cache de senhas.
Java cache nativo
Utilizando o Agente Java WebService A2A , a aplicação cliente irá utilizar um cache local protegido para armazenar todas credenciais requisitadas. Essa funcionalidade garante a aplicação uma melhor performance e um backup local seguro para situaçõe sonde o Segura® está inalcançável.
Se a credencial alvo sofrer alterações, o Agente Java WebService A2A irá falhar em construir o objeto de conexão de banco de dados e irá requisitar novamente a senha para o Segura®. E se a nova senha retornada também falhar, uma exceção será lançada para alertar a aplicação cliente.
Usando o token para acessar os recursos
O seguinte script exemplifica o uso do recurso WebService A2A entre um cliente e o Segura® :
package br.com.mt4.senhasegura;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
//#########################################################
// senhasegura connection class
import br.com.mt4.senhasegura.sql.ConnectionFactory;
//#########################################################
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class QueryServlet extends HttpServlet {
    public void doPost(HttpServletRequest request,
        HttpServletResponse response) throws IOException, ServletException {
        try {
            String url = request.getParameter("url");
            String consumerKey = request.getParameter("consumerkey");
            String consumerSecret = request.getParameter("consumersecret");
            String tokenKey = request.getParameter("tokenkey");
            String tokenSecret = request.getParameter("tokensecret");
            if (url.endsWith("/") == false) {
                url = url + "/";
            }
            // clear cache flag
            Boolean isClearCache = false;
            isClearCache = request.getParameter("clearCache").equals("clear");
            // ###################
            // SENHASEGURA - START
            // Connection factory
            ConnectionFactory factory = new ConnectionFactory(url,
                consumerKey, consumerSecret, tokenKey, tokenSecret);
            factory.setReferer(request.getRequestURL().toString());
            // Clear the cache if needed
            if (isClearCache)
                factory.clearCacheById(
                    Integer.parseInt(request.getParameter("id")));
            // Get database connection with specified password
            Connection con = factory.getConnection(
                Integer.parseInt(request.getParameter("id")));
            // SENHASEGURA - END
            // ###################
            // Prepare statement with query
            PreparedStatement stmt = con.prepareStatement(
                request.getParameter("query"));
            // Run a query
            ResultSet rs = stmt.executeQuery();
            // Table
            response.getWriter().println(
                "<table class='table table-condensed table-bordered'>");
            // Header
            response.getWriter().println("<thead><tr>");
            for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++) {
                response.getWriter().println(
                    "<th>" + rs.getMetaData().getColumnName(i) + "</th>");
            }
            response.getWriter().println("</tr></thead>");
            // iterate on the ResultSet
            response.getWriter().println("<tbody>");
            while (rs.next()) {
                response.getWriter().println("<tr>");
                for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++) {
                    response.getWriter().println(
                        "<td>" + rs.getString(i) + "</td>");
                }
                response.getWriter().println("</tr>");
            }
            response.getWriter().println("</tbody>");
            response.getWriter().println("</table>");
            rs.close();
            stmt.close();
            con.close();
        } catch (Exception e) {
            response.getWriter().println(
                "<div class='alert alert-danger'><b>Error: </b>"
                + e.getMessage() + "</div>");
            response.getWriter().println("<pre>");
            e.printStackTrace(response.getWriter());
            response.getWriter().println("</pre>");
        }
    }
}