终于找到了解决办法。我最终在 Pentaho 服务器上创建了一个 redirect.jsp 文件。然后,我将一个加密的 http auth 令牌传递给它,解密它,然后重定向到登录。效果很好。
编辑
确实是老问题,但我被要求提供有关我的解决方案的更多信息。所以这里。
首先,Pentaho 的默认安装使用HTTP Basic Authentication (BA)
. 如果您使用的是单点登录或 LDAP 解决方案,这可能不适合您。
所以我所做的就是将一个JSP
文件ROOT
放在..tomcat\webapps\ROOT
. 该 JSP 获取传入的登录信息并对其进行解密。该登录信息只是一个经过BASE64
身份验证的请求。
无论如何,这都不是超级安全的。但它允许我做的是从一台服务器发送加密的用户/密码并将其传递给另一台服务器。当然,如果您一直是 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 请求,使用它对其进行加密并将其MY-SECRET-PASSWORD
发送到 JSP。然后 JSP 解密它并读取 BA 标头并将其传递给 Pentaho。
非常适合我们。
希望它可以帮助某人。