簡體   English   中英

Tableau與Web項目的集成

[英]Tableau Integration with Web project

我正在使用Java腳本api與Web項目進行Tableau集成。 我已經使用commnad:tabadmin set wgserver.trusted_hosts“”和相應的命令在tableau服務器中配置了我的ip。但是我無法獲取票證,結果為-1。 我已完成所有配置步驟。

 public class TableauServlet extends javax.servlet.http.HttpServlet {
private static final long serialVersionUID = 1L;

public TableauServlet() {
    super();
}       

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    final String user = "raghu";
    final String wgserver = "103.xxx.xxx.xx";
    final String dst = "views/Regional/College?:iid=1";
    final String params = ":embed=yes&:toolbar=yes";

    String ticket = getTrustedTicket(wgserver, user, request.getRemoteAddr());

    if ( !ticket.equals("-1") ) {
        response.setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY);
        response.setHeader("Location", "http://" + wgserver + "/trusted/" + ticket + "/" + dst + "?" + params);
    }
    else
        // handle error
        throw new ServletException("Invalid ticket " + ticket);
}   

// the client_ip parameter isn't necessary to send in the POST unless you have
// wgserver.extended_trusted_ip_checking enabled (it's disabled by default)
private String getTrustedTicket(String wgserver, String user, String remoteAddr) 
    throws ServletException 
{
    OutputStreamWriter out = null;
    BufferedReader in = null;
    try {
        // Encode the parameters
        StringBuffer data = new StringBuffer();
        data.append(URLEncoder.encode("username", "UTF-8"));
        data.append("=");
        data.append(URLEncoder.encode(user, "UTF-8"));
        data.append("&");
        data.append(URLEncoder.encode("client_ip", "UTF-8"));
        data.append("=");
        data.append(URLEncoder.encode(remoteAddr, "UTF-8"));

        // Send the request
        URL url = new URL("http://" + wgserver + "/trusted");
        URLConnection conn = url.openConnection();
        conn.setDoOutput(true);
        out = new OutputStreamWriter(conn.getOutputStream());
        out.write(data.toString());
        out.flush();

        // Read the response
        StringBuffer rsp = new StringBuffer();
        in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        String line;
        while ( (line = in.readLine()) != null) {
            rsp.append(line);
        }

        return rsp.toString();

    } catch (Exception e) {
        throw new ServletException(e);
    }
    finally {
        try {
            if (in != null) in.close();
            if (out != null) out.close();
        }
        catch (IOException e) {}
    }
}

}

我認為您在獲得受信任票證的URL中缺少“ target_site”參數,如果默認站點中沒有“ views / Regional / College”,則需要此參數。

我也對'-1'票感到很沮喪! 您可以嘗試的一件事是在將Web服務器IP添加到Tableau的trusted_hosts之后重新啟動Tableau Server。

我們最終要做的另一件事是將Web服務器的內部ip和外部ip都添加到tableau上的trusted_hosts中。 由於您將103.xxx.xxx.xx用作Tableau服務器,因此我假設兩個服務器都位於同一內部網絡上。 如果其他所有方法都失敗了,您可以嘗試一下。

我的代碼與您的代碼幾乎完全相同,並且可以正常工作。 因此,如果問題仍然存在,那一定是與配置有關的問題。 這是我的代碼:

private String getAuthenticationTicket(String tableauServerUserName,String tableauServerUrl, String targetSite) {

        OutputStreamWriter out = null;
        BufferedReader in = null;
        try {
            StringBuffer data = new StringBuffer();
            data.append(URLEncoder.encode("username", Constant.UTF_8));
            data.append("=");
            data.append(URLEncoder.encode(tableauServerUserName, Constant.UTF_8));
            data.append("&");
            data.append(URLEncoder.encode("target_site", Constant.UTF_8));
            data.append("=");
            data.append(URLEncoder.encode(targetSite, Constant.UTF_8));
            URL url = new URL(tableauServerUrl + "/" + "trusted");

            URLConnection conn = url.openConnection();
            conn.setDoOutput(true);
            out = new OutputStreamWriter(conn.getOutputStream());
            out.write(data.toString());
            out.flush();
            StringBuffer rsp = new StringBuffer();
            in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String line;
            while ((line = in.readLine()) != null) {
                rsp.append(line);
            }
            return rsp.toString();
        } catch (Exception ex) {
            //log stuff, handle error
            return null;
        } finally {
            try {
                if (in != null)
                    in.close();
                if (out != null)
                    out.close();
            } catch (IOException ex) {
               //log stuff, handle error
            }
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM