2016-04-08 19 views
2

Webcat'ımı tomcat'ta (Spring MVC tabanlı) mahvedemiyorum.Spring: DataSource java güvenlik yapılandırmasıyla ilgili hata yapma hatası

08-Apr-2016 13:32:22.502 INFO [localhost-startStop-16] org.apache.catalina.core.ApplicationContext.log Spring WebApplicationInitializers detected on classpath: [[email protected]3868, [email protected]] 
08-Apr-2016 13:32:22.735 INFO [localhost-startStop-16] org.apache.catalina.core.ApplicationContext.log Initializing Spring root WebApplicationContext 
08-Apr-2016 13:32:23.490 SEVERE [localhost-startStop-16] org.apache.catalina.core.StandardContext.listenerStart Excepción enviando evento inicializado de contexto a instancia de escuchador de clase org.springframework.web.context.ContextLoaderListener 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'securityConfig': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private javax.sql.DataSource com.mycompany.web.configuration.SecurityConfig.dataSource; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [javax.sql.DataSource] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:292) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1185) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:703) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:760) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482) 
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403) 
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306) 
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106) 
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4736) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5181) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:725) 
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:701) 
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717) 
    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:945) 
    at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1798) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private javax.sql.DataSource com.justinfact.web.configuration.SecurityConfig.dataSource; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [javax.sql.DataSource] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:508) 
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:289) 
    ... 26 more 
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [javax.sql.DataSource] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1103) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:963) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:858) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:480) 
    ... 28 more 

08-Apr-2016 13:32:23.508 INFO [localhost-startStop-16] org.apache.catalina.core.ApplicationContext.log Closing Spring root WebApplicationContext 

benim java yapılandırması tamam düşünüyorum, ama bir şey yanlış: JDBC üzerinde güvenliğini yapılandırmak çalışırken bu hatayı alıyorum. Hatayı bulamıyorum. Bu yapılandırma dosyaları geçerli:

package com.mycompany.web.configuration; 

    import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; 

WebApplicationInitializer:

public class MycompanyWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { 

    @Override 
    protected String[] getServletMappings() { 
     return new String[] { "/" }; 
    } 

    @Override 
    protected Class<?>[] getRootConfigClasses() { 
     return new Class<?>[] { RootConfig.class }; 
    } 

    @Override 
    protected Class<?>[] getServletConfigClasses() { 
     return new Class<?>[] { WebConfig.class }; 
    } 
} 

WebConfig:

package com.mycompany.web.configuration; 

import javax.sql.DataSource; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.ComponentScan; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.context.annotation.Import; 
import org.springframework.jdbc.datasource.DriverManagerDataSource; 
import org.springframework.security.config.annotation.web.servlet.configuration.EnableWebMvcSecurity; 
import org.springframework.web.servlet.ViewResolver; 
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer; 
import org.springframework.web.servlet.config.annotation.EnableWebMvc; 
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; 
import org.springframework.web.servlet.view.tiles3.TilesConfigurer; 
import org.springframework.web.servlet.view.tiles3.TilesViewResolver; 
/** 
* Clase que realiza la configuración Spring de la aplicación. 
* 
* @author Hadeto Uruguay S.L. 
* 
*/ 
@Configuration 
@EnableWebMvc 
@ComponentScan("com.mycompany.web") 
//@Import({SecurityConfig.class}) 
public class WebConfig extends WebMvcConfigurerAdapter { 

    /** 
    * Registra la base de datos de backend. 
    * 
    * @return DriverManagerDataSource 
    */ 
    @Bean(name="dataSource") 
    public DataSource dataSource() { 
     DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource(); 
     driverManagerDataSource.setDriverClassName("com.mysql.jdbc.Driver"); 
     driverManagerDataSource.setUrl("jdbc:mysql://localhost:3306/mydbdb"); 
     driverManagerDataSource.setUsername("username"); 
     driverManagerDataSource.setPassword("password"); 
     return driverManagerDataSource; 
    } 

    /** 
    * Configura Apache Tiles como gestor de vistas. 
    * 
    * @return TilesConfigurer 
    */ 
    @Bean 
    public TilesConfigurer tilesConfigurer() { 
     TilesConfigurer tiles = new TilesConfigurer(); 
     tiles.setDefinitions(new String[] {"/WEB-INF/layout/tiles.xml"}); 
     tiles.setCheckRefresh(true); 
     return tiles; 
    } 

    /** 
    * Registra Apache Tiles como gestor de vistas. 
    * 
    * @return TilesConfigurer 
    */ 
    @Bean 
    public ViewResolver viewResolver() { 
     return new TilesViewResolver(); 
    } 

    @Override 
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { 
     configurer.enable(); 
    } 

} 

SecurityConfig

package com.mycompany.web.configuration; 

import javax.sql.DataSource; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; 
import org.springframework.security.config.annotation.web.builders.HttpSecurity; 
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; 
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; 

/** 
* Gestiona la seguridad de la aplicación a nivel Spring 
* 
* @author Hadeto Uruguay S.L. 
* 
*/ 
@EnableWebSecurity 
public class SecurityConfig extends WebSecurityConfigurerAdapter{ 
    @Autowired 
    private DataSource dataSource; 

    /** 
    * Configura el acceso a la aplicación para los usuarios. 
    */ 
    @Autowired 
    protected void configure(AuthenticationManagerBuilder auth) throws Exception { 
     String queryUsers = "SELECT bla bla bla bla"; 
     String queryAuth = "SELECT bla bla bla"; 
     auth.jdbcAuthentication().dataSource(dataSource). 
      usersByUsernameQuery(queryUsers). 
      authoritiesByUsernameQuery(queryAuth); 
    } 

    /** 
    * Configuración de la seguridad HTTP. 
    */ 
    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http.authorizeRequests().anyRequest().authenticated(). 
      and(). 
      formLogin().loginPage("/").permitAll().failureUrl("/").usernameParameter("username").passwordParameter("password"). 
      and(). 
      httpBasic(). 
      and(). 
      csrf(); 
    } 

} 

Kök Yapılandırma

package com.mycompany.web.configuration; 

import org.springframework.context.annotation.ComponentScan; 
import org.springframework.context.annotation.ComponentScan.Filter; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.context.annotation.FilterType; 
import org.springframework.web.servlet.config.annotation.EnableWebMvc; 

@Configuration 
@ComponentScan(basePackages={"com.justinfact.web"}, 
       excludeFilters={@Filter(type=FilterType.ANNOTATION, value=EnableWebMvc.class)}) 
public class RootConfig { 
} 
+0

neden 'yapılandırmak()' yöntemi ile yapılandırılmış 'Autowired' Mülkiyet @.? '@Outowired korumalı void yapılandırması (AuthenticationManagerBuilder auth) Özel Durumu ' –

+0

atar Tam yığın izlemeyi gönderin ve' RootConfig' ekleyin. –

+0

Güvenlik yapılandırmanız, (ContextLoaderListener) kök bağlamına yüklenir (en azından), bu bağlamda yalnızca bu bağlamdaki fasulyeleri çocuk bağlamlarından değil, yani erişebilir; DispatcherServlet'in içeriği. 'DataSource' içeren' WebConfig' ikincisi tarafından yüklenir, dolayısıyla güvenlik yapılandırması noktasından 'DataSource' yok. Tanımı ilk başta olması gerektiği gibi 'RootConfig' öğesine taşıyın. –

cevap

0

sizin SecurityConfig Class'ta @Configuration ve @Service ek açıklama ekleyin.

@Configuration

bir Bean enjekte etmek bir Class sağlayan ve @Service açıklama AutoWired için Sınıf SecurityConfig yapar.

My bilgi sınırlıdır ve ben ben karşılaştığı Aynı Sorun senaryo gereği öneririm ... Bu deneyin etsin ..

@Configuration 
@Service 
@EnableWebSecurity 
public class SecurityConfig extends WebSecurityConfigurerAdapter{ 
    @Autowired 
    private DataSource dataSource; 

teşekkürler.

+0

aynı hata, işe yaramaz :( – user1748166

+0

'@ Service' –

+0

gerek yok, lütfen bu' @ComponentScan (basePackages = {"com.mycompany.web", "javax.sql.DataSource"}) ' –

0

AppInitilizer yapılandırarak çözüldü:

package com.mycompany.web.configuration; 

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; 

public class MyCompanytWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { 

    @Override 
    protected Class<?>[] getRootConfigClasses() { 
     //return new Class<?>[] { RootConfig.class }; 
     return new Class<?>[] { WebConfig.class }; 
    } 

    @Override 
    protected String[] getServletMappings() { 
     return new String[] { "/" }; 
    } 

    @Override 
    protected Class<?>[] getServletConfigClasses() { 
     return null; 
    } 

} 
+0

Merhaba, ayrıca WebConfig'i eklemek için çözümünüzü kullanmaya çalıştım. ''RootConfigClasses'-Array' 'sınıfına' 'ancak' http: // localhost: 8080' uygulamasına giderken hiçbir sunucu uygulaması yok Yukarıda açıklanan sorununuzu nasıl çözdünüz? – Tarator

+0

Yapılandırmada WebConfig.java sınıfını uyguladınız mı? Klasör? – user1748166

İlgili konular