银光应用中的 Pentaho 身份验证方法。

Pentaho Authentication Method in Silver light Application.

我想将 Pentaho 与 Silverlight 集成 platform.For 身份验证,有用户控制台的登录页面。我不想使用上面的登录页面登录,我想在后面的代码中登录。

我尝试了基本身份验证,但在新版本中它不起作用。

 string[] parts = System.Text.RegularExpressions.Regex.Split(ae.Result, "/");
                    String data = "userid=" + App.UserName + "&password=" + App.Password;
                    WebClient webClient = new System.Net.WebClient();
                    Uri uri = new Uri("http://localhost:8080/pentaho/Home?" + data);
                    webClient.Headers["Content-Type"] = "application/x-www-form-urlencoded";
                    webClient.Encoding = Encoding.UTF8;
                    App.WindowManager.ConsoleWrite(uri.ToString());
                    webClient.UploadStringAsync(uri, "POST", "");

但它适用于以前版本的 Pentaho。我知道 Pentaho 中几乎没有其他可用的方法。但它应该能够在 Silverlight 应用程序中执行。 您知道在 Silverlight 应用程序中执行此操作的任何其他解决方案吗?

提前致谢!!!

在以前的版本中,我们可以在调用 prpt、xaction 或 Analyzer 时将 userid=admin&password=password 作为 URL 的一部分传递。

在 5.0 中,我们只能通过 URL 对主页进行身份验证。

尝试以下方法启用它。


i) 停止您的 Bi 服务器。
ii) 打开 applicationContext-spring-security.xml 并查找 filterChainProxy bean。
iii) 注释 bean 中的现有值部分并添加下面提供的新值部分。

 <value>
        <![CDATA[CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
        PATTERN_TYPE_APACHE_ANT
        /api/repos/dashboards/print=securityContextHolderAwareRequestFilter,httpSessionPentahoSessionContextIntegrationFilter,httpSessionContextIntegrationFilter,preAuthenticatedSecurityFilter,httpSessionReuseDetectionFilter,logoutFilter,authenticationProcessingFilter,basicProcessingFilter,requestParameterProcessingFilter,anonymousProcessingFilter,exceptionTranslationFilter,filterInvocationInterceptor
        /webservices/**=securityContextHolderAwareRequestFilterForWS,httpSessionPentahoSessionContextIntegrationFilter,httpSessionContextIntegrationFilter,basicProcessingFilter,anonymousProcessingFilter,exceptionTranslationFilterForWS,filterInvocationInterceptorForWS
        /api/**=securityContextHolderAwareRequestFilterForWS,httpSessionPentahoSessionContextIntegrationFilter,httpSessionContextIntegrationFilter,requestParameterProcessingFilter,basicProcessingFilter,anonymousProcessingFilter,exceptionTranslationFilterForWS,filterInvocationInterceptorForWS
        /plugin/**=securityContextHolderAwareRequestFilterForWS,httpSessionPentahoSessionContextIntegrationFilter,httpSessionContextIntegrationFilter,requestParameterProcessingFilter,basicProcessingFilter,anonymousProcessingFilter,exceptionTranslationFilterForWS,filterInvocationInterceptorForWS
        /**=securityContextHolderAwareRequestFilter,httpSessionPentahoSessionContextIntegrationFilter,httpSessionContextIntegrationFilter,httpSessionReuseDetectionFilter,logoutFilter,authenticationProcessingFilter,basicProcessingFilter,requestParameterProcessingFilter,anonymousProcessingFilter,exceptionTranslationFilter,filterInvocationInterceptor]]>
      </value>

iv) 重新启动您的服务器,您应该能够在 url 中使用用户凭据调用报告或 xaction。
v) 使用这个测试 URL http://localhost:8080/pentaho/api/repos/:public:Steel%20Wheels:Buyer%20Report%20%28sparkline%20report%29.prpt/viewer?userid=admin&password=password

使用查询字符串方法进行身份验证是一种不安全的方法,因此我找到了使用基本身份验证方法的解决方案。

WebClient webClient = new System.Net.WebClient();
Uri uri = new Uri("http://serverDomain:8080/pentaho/Home");
//Give user name and password here
var plainTextBytes = System.Text.Encoding.UTF8.GetBytes("username:password");
var encodedString = System.Convert.ToBase64String(plainTextBytes);
webClient.Headers["Authorization"] = "Basic " + encodedString;
webClient.Encoding = Encoding.UTF8;
App.WindowManager.ConsoleWrite(uri.ToString());
webClient.UploadStringAsync(uri, "POST", "");