unsatisfied dependency exception creating bean 'oauth2Controller' after loading new docker image:latest

Issue #16 open
Former user created an issue

Hi, we are using wisemapping in docker env with ldap auth ( microsoft AD). After upgrading to new version we got errors starting container. Seems to related to the new feature with google-oauth: 1:26:43.868 [main] ERROR org.springframework.web.servlet.DispatcherServlet - Context initialization failed org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'oauth2Controller': Unsatisfied dependency expressed through field 'authManager'; nested exception is org.springframework.beans.factory. ... (more details in log file -> attachment)

Result: wisemapping web site is available, ldap auth works, but nobody can create a new mindmap. (???)

Kind regards Henrik

Comments (9)

  1. Matthieu Herrb

    Hi,

    I’m facing the same issue on a new deployement. Can you tell me what is the last version that is known to work with LDAP auth ?

    Best Regards

  2. Mario Voigt

    some additional info: when i change app properties from security.type=ldap to use security.type=db then i can register new users and the logins performs, but there is no redirect to the mapping view to edit sth. i can reset password for registered users too. So it seems the auth Handler is defect generally. When using security.type=db there is no JavaException in the logs. Generally, the logs do not trigger any error when logging it

  3. Mario Voigt

    It must have to do sth with bean configuration in XML files, like the change in file was done in https://bitbucket.org/wisemapping/wisemapping-open-source/commits/34b00a8a7f917f3d14c37721e56d73a72061957b, provided by issue https://bitbucket.org/wisemapping/wisemapping-open-source/issues/9/problems-with-ad-authentication

    I dont know how the config has to look alike

    vim /opt/apache-tomcat-10.1.11/webapps/wisemapping/WEB-INF/wisemapping-security-ldap.xml
    

    i guess we need to add sth. like

        <bean id="OAuth2Controller" class="com.wisemapping.security.AuthenticationProvider" factory-method="authenticate"/>
    

    … which does not work. I dont understands the concepts, because i am not a java/spring developer at all

    btw you dont need a running ldap server to compile and run WiseMapping, to see the errors belonging to the auth handler. You just need to swith to security.type=ldap in app.properties.

    I also tried to check out what happens when removing Google stuff completely, but without major success. When removing the files …

    rm /opt/wisemapping/wise-webapp/src/main/java/com/wisemapping/security/GoogleAuthenticationProvider.java
    rm /opt/wisemapping/wise-webapp/src/main/java/com/wisemapping/rest/OAuth2Controller.java
    

    and compiling again + starting tomcat, the catalina output is:

    11:12:39.717 [main] ERROR org.springframework.web.servlet.DispatcherServlet - Context initialization failed
    org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userController': Unsatisfied dependency expressed through field 'authManager'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.security.authentication.AuthenticationManager' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Qualifier("authenticationManager"), @org.springframework.beans.factory.annotation.Autowired(required=true)}
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:660) ~[spring-beans-5.3.28.jar:5.3.28]
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640) ~[spring-beans-5.3.28.jar:5.3.28]
        at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) ~[spring-beans-5.3.28.jar:5.3.28]
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399) ~[spring-beans-5.3.28.jar:5.3.28]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431) ~[spring-beans-5.3.28.jar:5.3.28]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619) ~[spring-beans-5.3.28.jar:5.3.28]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.28.jar:5.3.28]
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.28.jar:5.3.28]
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.28.jar:5.3.28]
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.28.jar:5.3.28]
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.28.jar:5.3.28]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:955) ~[spring-beans-5.3.28.jar:5.3.28]
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:920) ~[spring-context-5.3.28.jar:5.3.28]
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) ~[spring-context-5.3.28.jar:5.3.28]
        at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:702) ~[spring-webmvc-5.3.28.jar:5.3.28]
        at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:668) ~[spring-webmvc-5.3.28.jar:5.3.28]
        at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:716) ~[spring-webmvc-5.3.28.jar:5.3.28]
        at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:591) ~[spring-webmvc-5.3.28.jar:5.3.28]
        at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:530) [spring-webmvc-5.3.28.jar:5.3.28]
        at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:170) [spring-webmvc-5.3.28.jar:5.3.28]
        at jakarta.servlet.GenericServlet.init(GenericServlet.java:143) [servlet-api.jar:6.0]
        at jakarta.servlet.http.HttpServlet.init(HttpServlet.java:121) [servlet-api.jar:6.0]
        at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:944) [catalina.jar:10.1.11]
        at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:901) [catalina.jar:10.1.11]
        at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:805) [catalina.jar:10.1.11]
        at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4637) [catalina.jar:10.1.11]
        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4930) [catalina.jar:10.1.11]
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) [catalina.jar:10.1.11]
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:683) [catalina.jar:10.1.11]
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:658) [catalina.jar:10.1.11]
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:713) [catalina.jar:10.1.11]
        at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:975) [catalina.jar:10.1.11]
        at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1949) [catalina.jar:10.1.11]
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) [?:?]
        at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
        at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) [tomcat-util.jar:10.1.11]
        at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:123) [?:?]
        at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:776) [catalina.jar:10.1.11]
        at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:426) [catalina.jar:10.1.11]
        at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1656) [catalina.jar:10.1.11]
        at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:309) [catalina.jar:10.1.11]
        at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123) [catalina.jar:10.1.11]
        at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:423) [catalina.jar:10.1.11]
        at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:366) [catalina.jar:10.1.11]
        at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:893) [catalina.jar:10.1.11]
        at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:846) [catalina.jar:10.1.11]
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) [catalina.jar:10.1.11]
        at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1328) [catalina.jar:10.1.11]
        at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1318) [catalina.jar:10.1.11]
        at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
        at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) [tomcat-util.jar:10.1.11]
        at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145) [?:?]
        at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:866) [catalina.jar:10.1.11]
        at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:241) [catalina.jar:10.1.11]
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) [catalina.jar:10.1.11]
        at org.apache.catalina.core.StandardService.startInternal(StandardService.java:428) [catalina.jar:10.1.11]
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) [catalina.jar:10.1.11]
        at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:918) [catalina.jar:10.1.11]
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) [catalina.jar:10.1.11]
        at org.apache.catalina.startup.Catalina.start(Catalina.java:795) [catalina.jar:10.1.11]
        at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
        at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?]
        at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
        at java.lang.reflect.Method.invoke(Method.java:568) ~[?:?]
        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:347) [bootstrap.jar:10.1.11]
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:478) [bootstrap.jar:10.1.11]
    Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.security.authentication.AuthenticationManager' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Qualifier("authenticationManager"), @org.springframework.beans.factory.annotation.Autowired(required=true)}
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1801) ~[spring-beans-5.3.28.jar:5.3.28]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1357) ~[spring-beans-5.3.28.jar:5.3.28]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311) ~[spring-beans-5.3.28.jar:5.3.28]
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:657) ~[spring-beans-5.3.28.jar:5.3.28]
        ... 65 more
    

    it would be still cool to know how i get WiseMapping running with the recent develop or master branch. i checked out different version but was not able to get one working. If LDAP is not avail at the moment id like to use it wit regular registrations, but even this is not working at all. and the log is empty, while i configured log4j to log out everything at DEBUG level:

    /opt/apache-tomcat-10.1.11/webapps/wisemapping/WEB-INF/classes/log4j.properties
    
    # Log levels
    log4j.rootLogger=DEBUG, stdout
    log4j.logger.com.wisemapping=DEBUG
    log4j.logger.org.springframework=DEBUG
    log4j.logger.org.hibernate=DEBUG
    log4j.logger.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
    log4j.logger.org.hibernate.SQL=DEBUG
    
    # Stdout logger
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%d %p %c - %m%n
    
    
    # File Writer Logger
    #log4j.appender.R=org.apache.log4j.RollingFileAppender
    #log4j.appender.R.File=wisemapping.log
    
    #log4j.appender.R.MaxFileSize=100KB
    # Keep one backup file
    #log4j.appender.R.MaxBackupIndex=1
    
    #log4j.appender.R.layout=org.apache.log4j.PatternLayout
    #log4j.appender.R.layout.ConversionPattern=%d %p %c - %m%n
    

    /opt/apache-tomcat-10.1.11/webapps/wisemapping/WEB-INF/classes/log4j-stdout.properties

    # Debug level
    log4j.rootLogger=DEBUG,stdout
    
    # Stdout logger
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%d %p %c - %m%n
    

  4. Mario Voigt

    at least i was able to build the project with JDK 17 now; Maven was too old. I update from 3.6.3 to 3.9.3

  5. Mario Voigt

    i changed to Jetty11 and checked out https://bitbucket.org/wisemapping/wisemapping-open-source/commits/53173ec75d0799c5d2eec97c05055b731996ad47 but now i get

    • i installed jetty 11.0.15 to /opt/
    • adjusted /opt/jetty-home-11.0.15/jetty-base/start.d/deploy.ini to include jsp module “--module=deploy,jsp
    • added two missing dependencies in /opt/wisemapping/wise-webapp/pom.xml
    <dependency>             
      <groupId>org.glassfish.web</groupId>             
      <artifactId>jakarta.servlet.jsp.jstl</artifactId>             
      <version>3.0.1</version>         
    </dependency>
    <dependency>
      <groupId>jakarta.servlet.jsp.jstl</groupId>             
      <artifactId>jakarta.servlet.jsp.jstl-api</artifactId>             
      <version>3.0.0</version>         
    </dependency>
    
    • adjusted app.properties
    • checked out the lastest commit and built
    • deployed the war file to webapps directory
    • adjusted nginx reverse proxy
    • ran the server …

    is there any chance to get this running? i dont want to use docker at all and the docker image is outdated in terms of used tomcat version.

  6. Log in to comment