2017-07-25 3 views
0

Ich mache Tableau-Integration mit Web-Projekt mit Java Script API. Ich habe meine IP in Tableau Server mit commnad konfiguriert: tabadmin set wgserver.trusted_hosts "" und entsprechende Befehle. Aber ich bin nicht in der Lage, das Ticket zu bekommen, endete mit -1. Ich habe alle Konfigurationsschritte befolgt.Tableau Integration mit Web-Projekt

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) {} 
    } 
} 

}

Antwort

0

Ich glaube, Sie fehlen ‚target_site‘ Parameter in der URL, wo Sie Ticket vertraut erhalten, seine erforderlich, wenn Sie nicht über die Ansichten/Regional/Hochschule "in Ihrem Standard-Website .

Ich hatte eine Menge Frustration mit dem '-1' Ticket auch durch! Eine Sache, die Sie versuchen könnten, ist den Tableau-Server neu zu starten, nachdem Sie Ihre Webserver-IP den trusted_hosts von tableau hinzugefügt haben.

Eine andere Sache, die wir am Ende getan haben, war das Hinzufügen der internen IP-Adresse und der externen IP-Adresse des Webservers zu trusted_hosts on tableau. Da Sie 103.xxx.xxx.xx als Tableau-Server verwenden, nehme ich an, dass beide Server im selben internen Netzwerk leben. Sie könnten das versuchen, wenn alles andere fehlschlägt.

Mein Code ist fast genau der gleiche wie Ihr und funktioniert gut. Wenn das Problem weiterhin besteht, muss es sich um eine Konfiguration handeln. Hier ist mein Code:

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 
      } 
     } 
    } 
+0

Danke für Ihre Antwort @merawalaid. Ich habe den Zielparameter jetzt im get HTML-Seite als Ticket wie { Tableau Server Anmelden} und jetzt ist das Problem org.apache.coyote.http11.HeadersTooLargeException: Es wurde versucht, mehr Daten in die Antwortheader zu schreiben, als im Puffer Platz frei war. Erhöhen Sie maxHttpHeaderSize für den Connector, oder schreiben Sie weniger Daten in die Antwortheader. – veera

+0

Humm ... es sieht so aus, als ob der Tableau-Server Ihnen kein vertrauenswürdiges Token gegeben hat und versucht, Sie auf seine Login-Seite umzuleiten. Wenn ich an Ihrem Platz wäre, würde ich "client_ip" einfach loswerden, bis ich den grundlegenden Token-Mechanismus funktioniere. Außerdem würde ich prüfen, ob der Benutzer 'raghu' den Zugriff auf den Tableau-Server auf die von Ihnen angegebene 'target_site' konfiguriert hat. Aus Code-Sicht kann ich nichts falsch finden mit dem, was Sie tun, ich habe sehr ähnlichen Code arbeiten. Also muss das Problem wegen eines Konfigurationsproblems sein. – merawalaid

+0

eine Sache, die ich vergessen zu erwähnen, ist Tableau-Server ist in einem anderen Netzwerk und Webserver ist in meinem lokalen.Im versucht, auf Tableau-Server von meinem lokalen zugreifen.Ist es irgendwelche Redirect-Einrichtung? – veera