Jump to content
Changes to the Jaspersoft community edition download ×
  • JasperReports Server 6.0.1 Authentication with NTLM


    Steve Park
    • Features: JasperReports Server, User Authorization Version: v6.0.1 Product: JasperReports® Server

    Configuring JasperReports Server v6.0.1 SSO Active Directory Authentication with NTLM/Kerberos

    Customers in a Windows environment using Active Directory for authentication may configure JasperReports Server to automatically authenticate using the NTLM protocol without seeing the login screen. This is done using the WAFFLE 1.7 library. A modified version of this library is attached, along with support libraries and a custom authentication filter for handling SSO. The following steps outline how to configure this authentication. This document assumes you're using the bundled Apache Tomcat web server. For non-bundled Tomcat or other web servers, please adjust the paths in the steps as needed.

    IMPORTANT:  This is community-contributed content and is not supported by TIBCO Analytics.  It is provided as-is with no express or implied warranties of any kind.  The source code is included in the Waffle-ntlm.jar file and may be modified to meet your business requirements.  By doing so, however, the end consumer assumes all liabilities and responsibilities for modifying the code.

    IMPORTANT: These instructions work with 6.0.1 and newer versions of JasperReports Server, which contains an upgrade in the Spring Security libraries to version 3.2. For 6.0.0 and older versions that use Spring Security 2, please click here.

    IMPORTANT: There is a problem with the settings in 6.2.0, can not find the library com.jaspersoft.jasperserver.multipleTenancy

    Prerequisites

    • Windows Server 2003 or later (Tested with Windows Server 2008 R2) with the Active Directory Domain Services and DNS Server roles installed

    • JasperReports Server 6.0.1 or later running on Apache Tomcat as a Windows Service logged on as an Active Directory Domain user

    Configuration Steps

    1. Download the Waffle-1_7-NTLM-JRS.zip that contains these jar files:

      unpack them and save them in the following locations:

      <jasperserver-home>/apache-tomcat/lib

      • waffle-jna-1.7.jar
      • jna-platform-4.1.0.jar
      • jna-4.1.0.jar
      • guava-18.0.jar

      <jasperserver-home>/apache-tomcat/webapps/jasperserver-pro/WEB-INF/lib

      • waffle-jna-1.7.jar
      • waffle-1.7-ntlm.jar
      • waffle-spring-security3-1.7.jar

      IMPORTANT:  Beginning in version 6.2.0, JasperReports Server deployment includes older versions of the JNA and Platform jar files (jna-3.4.0.jar and platform-3.4.0.jar) in the <jasperserver-home>/apache-tomcat/webapps/jasperserver-pro/WEB-INF/lib folder. You will need to manually delete these jar files.

    2. In a text editor, create this file with the following contents:

      <jasperserver-home>/apache-tomcat/webapps/jasperserver-pro/WEB-INF/applicationContext-waffle.xml

      <beans xmlns="http://www.springframework.org/schema/beans"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns:util="http://www.springframework.org/schema/util"
             xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd">
      
          <!-- windows authentication provider -->
          <bean id="waffleWindowsAuthProvider"
                class="waffle.windows.auth.impl.WindowsAuthProviderImpl" />
      
          <!-- collection of security filters -->
          <bean id="negotiateSecurityFilterProvider"
                class="waffle.servlet.spi.NegotiateSecurityFilterProvider">
              <constructor-arg ref="waffleWindowsAuthProvider" />
          </bean>
      
          <bean id="basicSecurityFilterProvider"
                class="waffle.servlet.spi.BasicSecurityFilterProvider">
              <constructor-arg ref="waffleWindowsAuthProvider" />
          </bean>
      
          <bean id="waffleSecurityFilterProviderCollection"
                class="waffle.servlet.spi.SecurityFilterProviderCollection">
              <constructor-arg>
                  <list>
                      <ref bean="negotiateSecurityFilterProvider" />
                      <ref bean="basicSecurityFilterProvider" />
                  </list>
              </constructor-arg>
          </bean>
      
          <bean id="negotiateSecurityFilterEntryPoint"
                class="waffle.spring.NegotiateSecurityFilterEntryPoint">
              <property name="provider"
                        ref="waffleSecurityFilterProviderCollection" />
          </bean>
      
          <!-- spring security filter -->
          <bean id="waffleNegotiateSecurityFilter"
                class="com.jaspersoft.security.waffle.CustomAuthenticationFilter">
              <property name="provider"
                        ref="waffleSecurityFilterProviderCollection" />
              <property name="allowGuestLogin" value="false" />
              <property name="principalFormat" value="fqn" />
              <property name="roleFormat" value="both" />
              <property name="domain" value="*Windows Domain Name*" />
              <property name="userSearch" ref="userSearch" />
              <property name="impersonate" value="false" />
              <!-- property name="roleFilterString" value="JASPER" /-->
              <property name="userAuthorityService">
                  <ref bean="${bean.internalUserAuthorityService}"/>
              </property>
              <property name="externalUserProcessor">
                  <ref bean="defaultExternalUserProcessor"/>
              </property>
              <property name="multiTenancyConfiguration">
                  <ref bean="multiTenancyConfiguration"/>
              </property>
      
              <property name="adminRoles">
                  <map>
                      <entry>
                          <key>
                              <value>ROLE_DOMAIN_ADMINS</value>
                          </key>
                          <value>ROLE_ADMINISTRATOR</value>
                      </entry>
                  </map>
              </property>
          </bean>
      </beans>
      

      Replace the *Windows Domain Name* value with the domain name of your Active Directory server. The domain name appears when an Active Directory user logs in to their computer, as shown:

      ad_domain_name.png.f5d002a0a3f55bc7c4978ee103800d24.png

      NOTE: Earlier versions of this document recommended using the fully qualified domain name, i.e. stevejs.com. This is incorrect. The domain name to use here is the one that would appear as a prefix of a user name when logging in to a new domain controller.

      You can also uncomment the roleFilterString property in the waffleNegotiateSecurityFilter bean to only create roles in JasperReports Server whose names match the filter string.

    3. Copy the sample-applicationContext-externalAuth-LDAP.xml (community) or sample-applicationContext-externalAuth-LDAP-mt.xml (professional), hereafter referred to as sample-applicationContext-externalAuth-LDAP[-mt].xml for brevity, from the <jasperreports-server-install-directory>/samples/externalAuth-sample-config folder to the <jasperserver-pro>/WEB-INF folder, rename it to applicationContext-externalAuth-LDAP[-mt].xml by removing the "sample-" prefix from the filename, and edit it:

      <jasperserver-home>/apache-tomcat/webapps/jasperserver-pro/WEB-INF/applicationContext-externalAuth-LDAP[-mt].xml

      Comment out the proxyAuthenticationProcessingFilter bean:

      <!--bean id="proxyAuthenticationProcessingFilter"
               class="com.jaspersoft.jasperserver.api.security.EncryptionAuthenticationProcessingFilter"
                parent="mtAuthenticationProcessingFilter">
              <property name="authenticationManager">
                  <ref local="ldapAuthenticationManager"/>
              </property>
      
              <property name="authenticationSuccessHandler"
                        ref="externalAuthSuccessHandler" />
          </bean-->
      

      Change the ldapAuthenticationProvider, userSearch, and ldapContextSource bean definitions to:

      <bean id="ldapAuthenticationProvider"
            class="com.jaspersoft.jasperserver.api.security.externalAuth.wrappers.spring.ldap.JSLdapAuthenticationProvider">
          <constructor-arg>
              <bean class="com.jaspersoft.jasperserver.api.security.externalAuth.wrappers.spring.ldap.JSBindAuthenticator">
                  <constructor-arg><ref local="ldapContextSource"/></constructor-arg>
                  <property name="userSearch" ref="userSearch"/>
              </bean>
          </constructor-arg>
          <constructor-arg>
              <bean class="com.jaspersoft.jasperserver.api.security.externalAuth.wrappers.spring.ldap.JSDefaultLdapAuthoritiesPopulator">
                  <constructor-arg index="0"><ref local="ldapContextSource"/></constructor-arg>
                  <constructor-arg index="1"><value></value></constructor-arg>
                  <property name="groupRoleAttribute" value="CN"/>
                  <property name="groupSearchFilter" value="(&amp;(member={0})(objectGroup=class))"/>
                  <property name="searchSubtree" value="true"/>
              </bean>
          </constructor-arg>
      </bean>
      
      <bean id="userSearch"
            class="com.jaspersoft.jasperserver.api.security.externalAuth.wrappers.spring.ldap.JSFilterBasedLdapUserSearch">
          <constructor-arg index="0">
              <value></value>
          </constructor-arg>
          <constructor-arg index="1">
              <value>(sAMAccountName={0})</value>
          </constructor-arg>
          <constructor-arg index="2">
              <ref local="ldapContextSource" />
          </constructor-arg>
          <property name="searchSubtree">
              <value>true</value>
          </property>
      </bean>
      
      <bean id="ldapContextSource"
            class="com.jaspersoft.jasperserver.api.security.externalAuth.ldap.JSLdapContextSource">
          <constructor-arg value="ldap://<DOMAIN SERVER HOST>[:<PORT>]/<BASE DN>"/>
          <property name="userDn" value="<ADMINISTRATOR UPN>"/>
          <property name="password" value="<ADMINISTRATOR PASSWORD>"/>
          <property name="referral" value="follow"/>
      </bean>
      

      IMPORTANT:  You will need to replace the <DOMAIN SERVER HOST>, <PORT>, <BASE DN>, <ADMINISTRATOR DN>, and <ADMINISTRATOR PASSWORD> placeholders in the above file with the actual values that correspond with your environment. For example, if your Active Directory Domain credentials are the following:

      • Server DNS name: dsp1.example.test
      • Domain Administrator User Principal Name: Administrator@example.test
      • Domain Administrator password: uhfe32

      Then your ldapContextSource bean definition would be:

      <bean id="ldapContextSource" class="com.jaspersoft.jasperserver.api.security.externalAuth.ldap.JSLdapContextSource">
          <constructor-arg value="ldap://dsp1.example.test:389/dc=example,dc=test"/>
          <property name="userDn" value="Administrator@example.test"/>
          <property name="password" value="uhfe32"/>
          <property name="referral" value="follow"/>
      </bean>
      
    4. Edit the applicationContext-security-web.xml file:

      <jasperserver-home>/apache-tomcat/webapps/jasperserver-pro/WEB-INF/applicationContext-security-web.xml

      Add the waffleNegotiateSecurityFilter bean to the wildcard (/**) filter chain immediately before the encryptionFilter bean:

      <bean id="filterChainProxy" class="org.springframework.security.web.FilterChainProxy">
              <security:filter-chain-map path-type="ant" request-matcher="ant">
                  <security:filter-chain pattern="/xmla" filters="httpSessionContextIntegrationFilter,${bean.loggingFilter},${bean.basicProcessingFilter},JIAuthenticationSynchronizer,anonymousProcessingFilter,basicAuthExceptionTranslationFilter,filterInvocationInterceptor"/>
                  <security:filter-chain pattern="/services/**" filters="httpSessionContextIntegrationFilter,${bean.loggingFilter},delegatingCASSingleSignOutFilter,delegatingPreAuthenticatedFilter,${bean.portletAuthenticationProcessingFilter},delegatingBasicProcessingFilter,${bean.passwordExpirationProcessingFilter},JIAuthenticationSynchronizer,anonymousProcessingFilter,wsBasicAuthExceptionTranslationFilter,filterInvocationInterceptor"/>
                  <security:filter-chain pattern="/rest/login" filters="httpSessionContextIntegrationFilter,${bean.loggingFilter}, encryptionFilter,delegatingCASSingleSignOutFilter,delegatingPreAuthenticatedFilter,delegatingAuthenticationRestProcessingFilter,JIAuthenticationSynchronizer,anonymousProcessingFilter,filterInvocationInterceptor"/>
                  <security:filter-chain pattern="/rest/**" filters="httpSessionContextIntegrationFilter,${bean.loggingFilter},delegatingCASSingleSignOutFilter,delegatingPreAuthenticatedFilter,${bean.portletAuthenticationProcessingFilter},delegatingBasicProcessingFilter,${bean.passwordExpirationProcessingFilter},JIAuthenticationSynchronizer,anonymousProcessingFilter,wsBasicAuthExceptionTranslationFilter,filterInvocationInterceptor"/>
                  <security:filter-chain pattern="/rest_v2/**" filters="httpSessionContextIntegrationFilter,encryptionFilter,delegatingCASSingleSignOutFilter,textOnlyResponseWebAppSecurityFilter,jsCsrfGuardFilter,${bean.loggingFilter},${bean.userPreferencesFilter},delegatingPreAuthenticatedFilter,${bean.authenticationProcessingFilter},${bean.userPreferencesFilter},delegatingBasicProcessingFilter,delegatingRequestParameterAuthenticationFilter,JIAuthenticationSynchronizer,anonymousProcessingFilter,restExceptionTranslationFilter,filterInvocationInterceptor"/>
                  <security:filter-chain pattern="/**" filters="httpSessionContextIntegrationFilter,waffleNegotiateSecurityFilter,encryptionFilter,delegatingCASSingleSignOutFilter,multipartRequestWrapperFilter,webAppSecurityFilter,jsCsrfGuardFilter,${bean.loggingFilter},${bean.userPreferencesFilter},delegatingPreAuthenticatedFilter,delegatingAuthenticationProcessingFilter,${bean.userPreferencesFilter},delegatingBasicProcessingFilter,delegatingRequestParameterAuthenticationFilter,JIAuthenticationSynchronizer,anonymousProcessingFilter,delegatingExceptionTranslationFilter,filterInvocationInterceptor,switchUserProcessingFilter,iPadSupportFilter"/>
              </security:filter-chain-map>
          </bean>
      

      In the exceptionTranslationFilter bean, comment out the following line:

      <constructor-arg ref="authenticationProcessingFilterEntryPoint"/>
      

      and add the following line immediately below it:

      <constructor-arg ref="negotiateSecurityFilterEntryPoint"/>
      
    5. On the Windows Server hosting the Active Directory controller, download the SetSPN.exe file from Microsoft (if necessary), open a command line window, and run the following command:

      SetSPN.exe -S http/<fully-qualified-tomcat-server-name> <AD-domain-name><tomcat-username>
      

      UPDATE:  According to the Apache Tomcat documentation, the Tomcat server must either run on port 80 or you must configure IIs to forward requests to the Tomcat server. Also, the SPN entry cannot contain a port number. For more information on how to configure Tomcat with Waffle, see https://tomcat.apache.org/tomcat-7.0-doc/windows-auth-howto.html#Waffle. For more information on how to configure IIs to forward requests to Tomcat, see https://ashrafhossain.wordpress.com/2010/09/20/how-to-configure-iis-7-and-tomcat-redirection-on-windows-server-2008-64-bit/.

      Launch the Server Manager application if necessary, and set the Active Directory user that's running the Tomcat server to use Trusted Delegation using Kerberos:

      AD-SSO-User-Delegation-Settings(1).png.6283e6e7acad58554f37d25ae7ef8101.png

    6. On the client machine, add the JasperReports Server website URL to the Intranet Zone in Internet Options:

      • Open Internet Explorer and click Tools > Internet Options.
      • Click the Security tab.
      • Click the Local Intranet zone and click the Sites button.
      • Click the Advanced button.
      • In the text box under "Add this website to the zone:", enter http://<fully-qualified-tomcat-server-name> and click the Add button.
      • Click the Close and OK buttons to exit.

      For more information on how to add websites to the Internet Explorer Intranet Zone using a Group Policy Object on the Windows Domain Controller, see https://blog.thesysadmins.co.uk/group-policy-internet-explorer-security-zones.html

    7. Restart Tomcat, open a browser window and navigate to the following URL:

      http://<fully-qualified-tomcat-server-name>/jasperserver-pro

    NOTE: On Firefox browsers, Windows Integrated Security isn't enabled by default. To enable, enter "about:config" on the URL, use the search term negotiate and set the following properties:

    • network.negotiate-auth.delegation-uris:  <fully-qualified-tomcat-server-name>
    • network.negotiate-auth.trusted-uris:  <fully-qualified-tomcat-server-name>
    • network.negotiate-auth.using-native-gssapi:  true

    For more information on integrating Apache Tomcat with Windows Active Directory, see http://tomcat.apache.org/tomcat-7.0-doc/windows-auth-howto.html

    For more information on setting SPNs and enabling trusted delegation, see https://geertbaeten.wordpress.com/2013/06/03/kerberos-authentication-and-delegation-serviceprincipalnames/

    waffle-1_7-ntlm-jrs.zip


    User Feedback

    Recommended Comments

    I am getting the following error:

    2021-06-11T15:53:23,469 ERROR ContextLoader,http-nio-8080-exec-18:350 - Context initialization failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'reportExecutorImpl': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'remoteServiceConfiguration': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'authenticationAuthorizationFilterChainProxy' defined in ServletContext resource [/WEB-INF/applicationContext-security-web.xml]: Cannot create inner bean 'security:filter-chain#306f3223' of type [org.springframework.security.web.DefaultSecurityFilterChain] while setting constructor argument with key [3]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'security:filter-chain#306f3223': Cannot resolve reference to bean 'waffleNegotiateSecurityFilter' while setting constructor argument with key [1]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'waffleNegotiateSecurityFilter': Failed to introspect bean class [com.jaspersoft.security.waffle.CustomAuthenticationFilter] for lookup method metadata: could not find class that it depends on; nested exception is java.lang.NoClassDefFoundError: com/jaspersoft/jasperserver/multipleTenancy/DefaultMultiTenancyConfiguration     at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:321)     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1268)     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:551)     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:481)     at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:312)     at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)     at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:308)     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)     at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:764)     at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:867)     at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)     at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:443)     at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:325)     at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107)     at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4699)     at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5165)     at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)     at org.apache.catalina.manager.ManagerServlet.start(ManagerServlet.java:1381)     at org.apache.catalina.manager.HTMLManagerServlet.start(HTMLManagerServlet.java:694)     at org.apache.catalina.manager.HTMLManagerServlet.doPost(HTMLManagerServlet.java:218)     at javax.servlet.http.HttpServlet.service(HttpServlet.java:660)     at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)     at org.apache.catalina.filters.CsrfPreventionFilter.doFilter(CsrfPreventionFilter.java:136)     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)     at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)     at org.apache.catalina.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:109)     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)     at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:610)     at org.apache.catalina.valves.RequestFilterValve.process(RequestFilterValve.java:348)     at org.apache.catalina.valves.RemoteAddrValve.invoke(RemoteAddrValve.java:52)     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)     at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:660)     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)     at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:798)     at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)     at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:808)     at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1498)     at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)     at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)     at java.lang.Thread.run(Thread.java:748) Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'remoteServiceConfiguration': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'authenticationAuthorizationFilterChainProxy' defined in ServletContext resource [/WEB-INF/applicationContext-security-web.xml]: Cannot create inner bean 'security:filter-chain#306f3223' of type [org.springframework.security.web.DefaultSecurityFilterChain] while setting constructor argument with key [3]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'security:filter-chain#306f3223': Cannot resolve reference to bean 'waffleNegotiateSecurityFilter' while setting constructor argument with key [1]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'waffleNegotiateSecurityFilter': Failed to introspect bean class [com.jaspersoft.security.waffle.CustomAuthenticationFilter] for lookup method metadata: could not find class that it depends on; nested exception is java.lang.NoClassDefFoundError: com/jaspersoft/jasperserver/multipleTenancy/DefaultMultiTenancyConfiguration     at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:321)     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1268)     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:551)     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:481)     at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:312)     at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)     at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:308)     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)     at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:522)     at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:496)     at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:627)     at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:171)     at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87)     at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:318)     ... 51 more Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'authenticationAuthorizationFilterChainProxy' defined in ServletContext resource [/WEB-INF/applicationContext-security-web.xml]: Cannot create inner bean 'security:filter-chain#306f3223' of type [org.springframework.security.web.DefaultSecurityFilterChain] while setting constructor argument with key [3]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'security:filter-chain#306f3223': Cannot resolve reference to bean 'waffleNegotiateSecurityFilter' while setting constructor argument with key [1]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'waffleNegotiateSecurityFilter': Failed to introspect bean class [com.jaspersoft.security.waffle.CustomAuthenticationFilter] for lookup method metadata: could not find class that it depends on; nested exception is java.lang.NoClassDefFoundError: com/jaspersoft/jasperserver/multipleTenancy/DefaultMultiTenancyConfiguration     at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:313)     at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:122)     at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveManagedList(BeanDefinitionValueResolver.java:382)     at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:157)     at org.springframework.beans.factory.support.ConstructorResolver.resolveConstructorArguments(ConstructorResolver.java:634)     at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:145)     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1197)     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1099)     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:511)     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:481)     at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:312)     at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)     at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:308)     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)     at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:208)     at org.springframework.beans.factory.support.DefaultListableBeanFactory.addCandidateEntry(DefaultListableBeanFactory.java:1317)     at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1283)     at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveMultipleBeans(DefaultListableBeanFactory.java:1206)     at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1097)     at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1067)     at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:518)     at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:496)     at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:627)     at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:171)     at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87)     at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:318)     ... 64 more Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'security:filter-chain#306f3223': Cannot resolve reference to bean 'waffleNegotiateSecurityFilter' while setting constructor argument with key [1]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'waffleNegotiateSecurityFilter': Failed to introspect bean class [com.jaspersoft.security.waffle.CustomAuthenticationFilter] for lookup method metadata: could not find class that it depends on; nested exception is java.lang.NoClassDefFoundError: com/jaspersoft/jasperserver/multipleTenancy/DefaultMultiTenancyConfiguration     at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:359)     at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:108)     at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveManagedList(BeanDefinitionValueResolver.java:382)     at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:157)     at org.springframework.beans.factory.support.ConstructorResolver.resolveConstructorArguments(ConstructorResolver.java:634)     at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:145)     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1197)     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1099)     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:511)     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:481)     at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:299)     ... 89 more Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'waffleNegotiateSecurityFilter': Failed to introspect bean class [com.jaspersoft.security.waffle.CustomAuthenticationFilter] for lookup method metadata: could not find class that it depends on; nested exception is java.lang.NoClassDefFoundError: com/jaspersoft/jasperserver/multipleTenancy/DefaultMultiTenancyConfiguration     at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:267)     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineConstructorsFromBeanPostProcessors(AbstractAutowireCapableBeanFactory.java:1122)     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1096)     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:511)     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:481)     at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:312)     at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)     at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:308)     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)     at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:351)     ... 99 more Caused by: java.lang.NoClassDefFoundError: com/jaspersoft/jasperserver/multipleTenancy/DefaultMultiTenancyConfiguration     at java.lang.Class.getDeclaredMethods0(Native Method)     at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)     at java.lang.Class.getDeclaredMethods(Class.java:1975)     at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:612)     at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:523)     at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:509)     at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:245)     ... 108 more Caused by: java.lang.ClassNotFoundException: com.jaspersoft.jasperserver.multipleTenancy.DefaultMultiTenancyConfiguration     at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1360)     at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1182)     ... 115 more

    Any ideas?

    Thanks!

    Link to comment
    Share on other sites



    Guest
    This is now closed for further comments

×
×
  • Create New...