Попытка настроить источник данных в Spring для авторизации через MySQL - бины безопасности не загружаются / проблема с автоматической проводкой - PullRequest
0 голосов
/ 24 ноября 2018

Я получаю эту ошибку

SEVERE: Context initialization failed
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'securityConfig': Unsatisfied dependency expressed through field 'securityDataSource'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'javax.sql.DataSource' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:596)

, а ниже -

SEVERE: Exception sending context initialized event to listener instance of class [org.springframework.web.context.ContextLoaderListener] org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'securityConfig': Unsatisfied dependency expressed through field 'securityDataSource'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'javax.sql.DataSource' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

Я поставил ниже свои файлы конфигурации Java Config и Security.

Сегодня яработал над реализацией AuthenticationManagerBuilder с JDBC после обучения.Я изменил свой компонент DataSource, чтобы он соответствовал описанию в учебнике, и теперь я получаю эту проблему.Раньше аутентификация работала нормально, также как и соединение с БД и спящий режим.

Не уверен, с чего начать.

Вот мой конфигурационный файл Java

@Configuration
@EnableWebMvc
@EnableTransactionManagement
@ComponentScan(basePackages= {"domain.applicationform","domain.config","domain.service","domain.dao"})
@PropertySource("classpath:persistence-mysql.properties")
public class ConfigClass extends WebMvcConfigurerAdapter {


    //Var to hold props and converter for ints
    @Autowired
    private Environment env;
    private int getIntProperty(String propName) {
        String propVal = env.getProperty(propName);
        int val = Integer.parseInt(propVal);
        return val;
    }

    // logger
    private Logger logger = Logger.getLogger(getClass().getName());

    //ViewResolver

    @Bean
    public ViewResolver viewResolver() {
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();

        viewResolver.setPrefix("/WEB-INF/view/");
        viewResolver.setSuffix(".jsp");

        return viewResolver;
    }

    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
    }

    @Bean
    public DataSource securityDataSource() {
        ComboPooledDataSource securityDataSource = new ComboPooledDataSource();

        try {
            securityDataSource.setDriverClass(env.getProperty("jdbc.driver"));
        } catch (PropertyVetoException e) {
            throw new RuntimeException(e);
        }

        //logging
        logger.info(">>> jdbc.url=" + env.getProperty("jdbc.url"));
        logger.info(">>> jdbc.user=" + env.getProperty("jdbc.user"));

        securityDataSource.setJdbcUrl(env.getProperty("jdbc.url"));
        securityDataSource.setUser(env.getProperty("jdbc.user"));
        securityDataSource.setPassword(env.getProperty("jdbc.password"));

        securityDataSource.setInitialPoolSize(getIntProperty("connection.pool.initialPoolSize"));
        securityDataSource.setMinPoolSize(getIntProperty("connection.pool.minPoolSize"));
        securityDataSource.setMaxPoolSize(getIntProperty("connection.pool.maxPoolSize"));
        securityDataSource.setMaxIdleTime(getIntProperty("connection.pool.maxIdleTime"));
        return securityDataSource;
    }

    private final Properties hibernateProperties() {
        Properties hibernateProperties = new Properties();
        //properties     hibernateProperties.setProperty()

        return hibernateProperties;
    }

        @Bean
        public LocalSessionFactoryBean sessionFactory() throws ClassNotFoundException {
            LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
            sessionFactory.setDataSource(securityDataSource());
            //sessionFactory.setAnnotatedClasses(new Class[] { EqualOps.class });
            sessionFactory.setPackagesToScan(
                      new String[] { "domain.applicationform","domain.dao","domain.service","domain.config"});
            sessionFactory.setHibernateProperties(hibernateProperties());

            return sessionFactory;
        }

        @Bean
        public PlatformTransactionManager hibernateTransactionManager() throws ClassNotFoundException {
            HibernateTransactionManager transactionManager
              = new HibernateTransactionManager();
            transactionManager.setSessionFactory(sessionFactory().getObject());
            return transactionManager;
        }

}

Вот мой SecurityConfig

package domain.config;


import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
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;


@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private DataSource securityDataSource;

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth.jdbcAuthentication().dataSource(securityDataSource);
    }
    @Override
    protected void configure(HttpSecurity http) throws Exception {

        http.authorizeRequests()
        .antMatchers("/").permitAll()
        .antMatchers("/management/manager/**").hasRole("MANAGER")
        .antMatchers("/management/recruitment/**").hasRole("RECRUITER")
        .antMatchers("/management/equalops/**").hasRole("RECRUITER")
        .antMatchers("/management/systems/**").hasRole("ADMIN")
        .and()
            .formLogin()
            .loginPage("/authenticationPage")
            .loginProcessingUrl("/authenticateUser")
        .permitAll()
        .and()
        .logout().permitAll()
        .and()
        .exceptionHandling().accessDeniedPage("/access-denied");
    }
}

EDIT1

Мои извинения, забыл опубликовать файл свойств.

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/new
jdbc.user=root
jdbc.password=root

connection.pool.initialPoolSize=5
connection.pool.minPoolSize=5
connection.pool.maxPoolSize=20
connection.pool.maxIdleTime=3000

1 Ответ

0 голосов
/ 25 ноября 2018

Spring boot datasource Автоконфигурация происходит в application.properties.вам нужно указать правильные свойства для распознавания пружиной.

попробуйте использовать это:

spring.datasource.url=
spring.datasource.username=
spring.datasource.password=
spring.datasource.driver-class-name=

Здесь вы можете найти общие свойства , поддерживаемые пружинойзагрузки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...