如何使用Java重定向到Pentaho用户控制台?

如何解决如何使用Java重定向到Pentaho用户控制台?

| 我在服务器上运行了Pentaho。在另一台服务器上,我正在运行Struts 1应用程序。 我想做的是提供指向Pentaho(
http://myserver/pentaho/Home
)用户控制台的链接。但是,这需要身份验证。 我可以在URL字符串中传递用户/传递,并且工作正常。但是很明显,这在URL中公开了密码。 有关如何执行此操作的任何线索?以下代码显示了我如何做到这一点并转储输出(通过PrintWriter),但是它要求pentaho源是本地的。 谢谢你的帮助。
public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response) throws Exception {

    HttpClient client = new HttpClient();
    PostMethod method = new PostMethod(\"http://myserver/pentaho/Home\");
    method.addParameter(\"userid\",\"moe.howard\");
    method.addParameter(\"password\",\"password\");

    int status = client.executeMethod(method);

    PrintWriter out = response.getWriter();
    out.print(method.getResponseBodyAsString());
    out.flush();
    out.close();

    return mapping.findForward(SUCCESS);
}
    

解决方法

        终于找到了解决方案。我最终在Pentaho服务器上创建了redirect.jsp文件。然后,我将加密的http auth令牌传递给它,将其解密,然后重定向到登录名。效果很好。 编辑 确实是个老问题,但有人要求我提供有关解决方案的更多信息。所以去。 首先,Pentaho的默认安装使用的是
HTTP Basic Authentication (BA)
。如果您使用的是单点登录或LDAP解决方案,则可能对您不起作用。 所以我所做的是将一个3号文件放在5号下的4号文件夹中。该JSP接收传入的登录信息并将其解密。该登录信息只是“ 6”认证请求。 无论如何,这不是超级安全。但是它允许我做的是从一台服务器发送加密的用户/密码并将其传递给另一台服务器。当然,如果您一直使用SSL,则可能不需要这样做,但是在某些情况下,信息是通过内部明文传递的。因此,它从未暴露于外部,但是我仍然想确保我们的内部服务器尽可能安全。 JSP:
<%@page contentType=\"text/html; charset=iso-8859-1\" language=\"java\" 
import=\"java.security.*\"
import=\"javax.crypto.Cipher\"
import=\"javax.crypto.spec.SecretKeySpec\"
import=\"sun.misc.*\"
%>

<%
  // Decrypt authenticated hash
  String ALGORITHM = \"AES\";
  byte[] keyValue = \"MY-SECRET-PASSWORD\".getBytes();

  Key key = new SecretKeySpec(keyValue,ALGORITHM);
  Cipher c = Cipher.getInstance(ALGORITHM);
  c.init(Cipher.DECRYPT_MODE,key);
  byte[] decodedValue = new BASE64Decoder().decodeBuffer(new String(request.getParameter(\"auth\")));
  byte[] decValue = c.doFinal(decodedValue);
  String decryptedValue = new String(decValue);
%>

<script type=\"text/javascript\">
   var auth = \'<%= decryptedValue%>\';

   function AJAX(url,callback) {

      var req = init();
      req.onreadystatechange = processRequest;

      function init() {
         if (window.XMLHttpRequest) {
            return new XMLHttpRequest();
         } else if (window.ActiveXObject) {
            return new ActiveXObject(\"Microsoft.XMLHTTP\");
         }
      }

      function processRequest () {
         // readyState of 4 signifies request is complete
         if (req.readyState == 4) {
            // status of 200 signifies sucessful HTTP call
            if (req.status == 200) {
               if (callback) callback(req.responseXML);
            }
         }
      }

      this.doGet = function() {
         req.open(\"GET\",url,true);
         req.setRequestHeader(\"Authorization\",\"Basic \" + auth);
         req.send(null);
      }
   }

   var url = \"/pentaho/Home\";
   var querystr = \"\";
   var ajax = new AJAX(url,function(){
      window.location = url;
   });

   ajax.doGet(querystr);

</script>
因此,我的登录服务器根据Pentaho使用的相同MySQL数据库对用户进行身份验证,创建经过身份验证(BA)的请求,即BASE64 \,使用相同的“ 8”对请求进行加密,然后将其发送至JSP。然后,JSP将其解密并读取BA头,并将其传递给Pentaho。 对我们很有用。 希望它能帮助某人。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?