银光应用中的Pentaho认证方法。

时间:2015-03-20 04:44:33

标签: c# silverlight pentaho

我想将Pentaho与Silverlight平台集成。对于身份验证,有用户控制台的登录页面。我不想使用上面的登录页面登录,我想登录后面的代码。

我尝试过基本身份验证,但在新版本中,它无法正常运行。

 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应用程序中做任何其他解决方案吗?

非常感谢你提前!!!

2 个答案:

答案 0 :(得分:0)

在以前的版本中,我们可以在调用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)重新启动服务器,您应该能够在网址中使用用户信用来调用报告或xaction。
v)使用此测试网址http://localhost:8080/pentaho/api/repos/:public:Steel%20Wheels:Buyer%20Report%20%28sparkline%20report%29.prpt/viewer?userid=admin&password=password

答案 1 :(得分:0)

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

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", "");