【问题标题】:integration Pentaho 7 Community Edition with SSO CAS将 Pentaho 7 Community Edition 与 SSO CAS 集成
【发布时间】:2017-08-26 03:46:48
【问题描述】:

我想将 pentaho bi-server CE 版本 7 与 SSO apereo CAS 连接。

我点击了这个链接integration Pentaho BA 7 community edition with CAS 并且仍然得到 该链接中提到的以下错误:

 Cannot find class for publish type: INTERFACES specified on publish of bean id: casAuthenticationProvider

由于这是第一次使用 CAS 安装 pentaho,我想知道 applicationContext-security-cas.xml 是否适合使用,如果有人可以为此版本提供一些内容,我将不胜感激。

使用的applicationContext-security-cas.xml:

<!-- ======================== FILTER CHAIN ======================= -->

<!-- overridden from applicationContext-spring-security.xml to enable CAS -->
  <bean id="filterChainProxy" class="org.springframework.security.util.FilterChainProxy">
    <property name="filterInvocationDefinitionSource">
      <!--
           You can safely remove the first pattern starting with /content/dashboards/print, if you're not using
           Enterprise Dashboards or not allowing printing of Dashboards,
       -->
      <value>
        <![CDATA[CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
        PATTERN_TYPE_APACHE_ANT
        /api/repos/dashboards/print=securityContextHolderAwareRequestFilter,httpSessionPentahoSessionContextIntegrationFilter,httpSessionContextIntegrationFilter,preAuthenticatedSecurityFilter,httpSessionReuseDetectionFilter,logoutFilter,casProcessingFilter,authenticationProcessingFilter,basicProcessingFilter,requestParameterProcessingFilter,anonymousProcessingFilter,exceptionTranslationFilter,filterInvocationInterceptor
        /webservices/**=securityContextHolderAwareRequestFilterForWS,httpSessionPentahoSessionContextIntegrationFilter,httpSessionContextIntegrationFilter,casProcessingFilter,basicProcessingFilter,anonymousProcessingFilter,exceptionTranslationFilterForWS,filterInvocationInterceptorForWS
        /api/**=securityContextHolderAwareRequestFilterForWS,httpSessionPentahoSessionContextIntegrationFilter,httpSessionContextIntegrationFilter,casProcessingFilter,basicProcessingFilter,anonymousProcessingFilter,exceptionTranslationFilterForWS,filterInvocationInterceptorForWS
        /plugin/**=securityContextHolderAwareRequestFilterForWS,httpSessionPentahoSessionContextIntegrationFilter,httpSessionContextIntegrationFilter,casProcessingFilter,basicProcessingFilter,anonymousProcessingFilter,exceptionTranslationFilterForWS,filterInvocationInterceptorForWS
        /**=securityContextHolderAwareRequestFilter,httpSessionPentahoSessionContextIntegrationFilter,httpSessionContextIntegrationFilter,httpSessionReuseDetectionFilter,logoutFilter,casProcessingFilter,authenticationProcessingFilter,basicProcessingFilter,requestParameterProcessingFilter,anonymousProcessingFilter,exceptionTranslationFilter,filterInvocationInterceptor]]>
      </value>
    </property>
  </bean>



    <!-- ======================== FILTER CHAIN WITH SIGNOUT ======================= -->
<!-- 
    <bean id="filterChainProxy"
         class="org.springframework.security.util.FilterChainProxy">
         <property name="filterInvocationDefinitionSource">
              <value>
                   <![CDATA[CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
                   PATTERN_TYPE_APACHE_ANT
                   /**=securityContextHolderAwareRequestFilter,httpSessionContextIntegrationFilter,logoutFilter,casSingleSignOutFilter,casProcessingFilter,basicProcessingFilter,requestParameterProcessingFilter,anonymousProcessingFilter,exceptionTranslationFilter,filterInvocationInterceptor]]>
              </value>
         </property>
    </bean>

          <bean id="filterChainProxy" class="org.springframework.security.util.FilterChainProxy">
        <property name="filterInvocationDefinitionSource">
          <!--
               You can safely remove the first pattern starting with /content/dashboards/print, if you're not using
               Enterprise Dashboards or not allowing printing of Dashboards,
           --> <!-- 
          <value>
            <![CDATA[CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
            PATTERN_TYPE_APACHE_ANT
            /api/repos/dashboards/print=securityContextHolderAwareRequestFilter,httpSessionPentahoSessionContextIntegrationFilter,httpSessionContextIntegrationFilter,preAuthenticatedSecurityFilter,httpSessionReuseDetectionFilter,logoutFilter,casSingleSignOutFilter,casProcessingFilter,authenticationProcessingFilter,basicProcessingFilter,requestParameterProcessingFilter,anonymousProcessingFilter,exceptionTranslationFilter,filterInvocationInterceptor
            /webservices/**=securityContextHolderAwareRequestFilterForWS,httpSessionPentahoSessionContextIntegrationFilter,httpSessionContextIntegrationFilter,casSingleSignOutFilter,casProcessingFilter,basicProcessingFilter,anonymousProcessingFilter,exceptionTranslationFilterForWS,filterInvocationInterceptorForWS
            /api/**=securityContextHolderAwareRequestFilterForWS,httpSessionPentahoSessionContextIntegrationFilter,httpSessionContextIntegrationFilter,casSingleSignOutFilter,casProcessingFilter,basicProcessingFilter,anonymousProcessingFilter,exceptionTranslationFilterForWS,filterInvocationInterceptorForWS
            /plugin/**=securityContextHolderAwareRequestFilterForWS,httpSessionPentahoSessionContextIntegrationFilter,httpSessionContextIntegrationFilter,casSingleSignOutFilter,casProcessingFilter,basicProcessingFilter,anonymousProcessingFilter,exceptionTranslationFilterForWS,filterInvocationInterceptorForWS
            /**=securityContextHolderAwareRequestFilter,httpSessionPentahoSessionContextIntegrationFilter,httpSessionContextIntegrationFilter,httpSessionReuseDetectionFilter,logoutFilter,casSingleSignOutFilter,casProcessingFilter,authenticationProcessingFilter,basicProcessingFilter,requestParameterProcessingFilter,anonymousProcessingFilter,exceptionTranslationFilter,filterInvocationInterceptor]]>
          </value>
        </property>
  </bean>
    <bean id="casSingleSignOutFilter" class="org.jasig.cas.client.session.SingleSignOutFilter"/>
 -->

<!-- ===================== HTTP REQUEST SECURITY ==================== -->

<bean id="serviceProperties"
    class="org.springframework.security.ui.cas.ServiceProperties">
    <property name="service"
        value="http://localhost:8080/pentaho/j_spring_cas_security_check" />
    <property name="sendRenew" value="false" />
</bean>

<!-- replaces authenticationProcessingFilter in filterChainProxy above -->
<bean id="casProcessingFilter"
    class="org.springframework.security.ui.cas.CasProcessingFilter">
    <property name="authenticationManager">
        <ref bean="authenticationManager" />
    </property>
    <property name="authenticationFailureUrl" value="/casFailed" />
    <property name="defaultTargetUrl" value="/" />
    <property name="filterProcessesUrl"
        value="/j_spring_cas_security_check" />
</bean>

<!-- overridden from applicationContext-spring-security.xml -->
<bean id="exceptionTranslationFilter"
    class="org.springframework.security.ui.ExceptionTranslationFilter">
    <property name="authenticationEntryPoint">
        <ref local="casProcessingFilterEntryPoint" />
    </property>
    <property name="accessDeniedHandler">
        <bean class="org.springframework.security.ui.AccessDeniedHandlerImpl" />
    </property>
</bean>

<bean id="casProcessingFilterEntryPoint" class="org.springframework.security.ui.cas.CasProcessingFilterEntryPoint">
    <property name="loginUrl"
        value="https://localhost:8443/cas/login" />
    <property name="serviceProperties">
        <ref local="serviceProperties" />
    </property>
</bean>
<bean id="authenticationManager" class="org.springframework.security.providers.ProviderManager">
<property name="providers">
   <list>
<ref bean="casAuthenticationProvider"/>
<ref bean="anonymousAuthenticationProvider"/>
</list>
</property>

    <bean id="casAuthenticationProvider"
    class="org.springframework.security.providers.cas.CasAuthenticationProvider">
    <property name="userDetailsService">
        <ref bean="userDetailsService" />
    </property>
    <property name="serviceProperties">
        <ref local="serviceProperties" />
        </property>
    <property name="ticketValidator">
        <ref local="ticketValidator" />
    </property>
    <property name="key"
        value="my_password_for_this_auth_provider_only" />
        <pen:publish as-type="INTERFACES">
        <pen:attributes>
            <pen:attr key="providerName" value="cas"/>
        </pen:attributes>
        </pen:publish>          
</bean>

<bean id="ticketValidator"
    class="org.jasig.cas.client.validation.Cas20ServiceTicketValidator">
<constructor-arg index="0" value="https://localhost:8443/cas" />
</bean>

<!-- overridden from applicationContext-spring-security.xml to specify logoutSuccessUrl as CAS logout page -->
<bean id="logoutFilter"
    class="org.springframework.security.ui.logout.LogoutFilter">
    <constructor-arg
        value="https://localhost:8443/cas/logout?url=http://localhost:8080/pentaho/index.jsp" />
    <!-- URL redirected to after logout -->
    <constructor-arg>
        <list>
            <bean
                class="org.pentaho.platform.web.http.security.PentahoLogoutHandler" />
            <bean
                class="org.springframework.security.ui.logout.SecurityContextLogoutHandler" />
        </list>
    </constructor-arg>
    <property name="filterProcessesUrl" value="/Logout" />
</bean>

【问题讨论】:

    标签: single-sign-on cas


    【解决方案1】:

    看起来你的 bean id 仍然指向旧的 spring 框架类。

    将 bean id ="casAuthenticationProvider" 上的类更改为指向 class="org.springframework.security.cas.authentication.CasAuthenticationProvider" 而不是 class="org.springframework.security.providers.cas.CasAuthenticationProvider"

    试一试,告诉我结果如何。

    【讨论】:

      猜你喜欢
      • 2017-05-26
      • 1970-01-01
      • 1970-01-01
      • 2017-08-25
      • 1970-01-01
      • 2012-05-18
      • 1970-01-01
      • 1970-01-01
      • 2020-02-13
      相关资源
      最近更新 更多