Форум программистов, компьютерный форум, киберфорум
Java EE (J2EE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
61 / 23 / 8
Регистрация: 27.07.2010
Сообщений: 496

Исключение Autowired(required=true) Exception

17.02.2020, 13:34. Показов 2353. Ответов 18

Студворк — интернет-сервис помощи студентам
Приветствую уважаемые форумчане.

Вот читаю документацию Spring Security, и дошел читать до пункта 10.1 In-Memory Authentication https://docs.spring.io/spring-... n-inmemory Всё нормально, проблем нет.

А вот чуть ниже, пункт 10.2 JDBC Authentication https://docs.spring.io/spring-... ation-jdbc для меня есть проблема. А именно:

При запуске проекта получаю исключение:

ИСКЛЮЧЕНИЕ:
Кликните здесь для просмотра всего текста
17-Feb-2020 20:40:28.418 WARNING [RMI TCP Connection(3)-127.0.0.1] org.springframework.context.support.Abst ractApplicationContext.refresh Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.Unsati sfiedDependencyException: Error creating bean with name 'securityConfig': Unsatisfied dependency expressed through field 'dataSource'; nested exception is org.springframework.beans.factory.NoSuch BeanDefinitionException: 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.anno tation.Autowired(required=true)}


Не могу понять почему она появляется, вроде всё норм.

Мой примитивный проект выглядит следующим образом:

package com.mysprinttestsecurity.config;

FreeMarkerConfig.class
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;
import org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver;
 
@Configuration
@ComponentScan({"com.mysprinttestsecurity"})
public class FreeMarkerConfig {
 
 
    @Bean
    public FreeMarkerConfigurer freeMarkerConfigurer() {
        FreeMarkerConfigurer configurer = new FreeMarkerConfigurer();
        configurer.setTemplateLoaderPath("/WEB-INF/templates");
        configurer.setDefaultEncoding("UTF-8");
        return configurer;
    }
 
    @Bean
    public ViewResolver getViewResolver(){
        FreeMarkerViewResolver viewResolver = new FreeMarkerViewResolver();
        viewResolver.setSuffix(".ftl");
        viewResolver.setContentType("text/html;charset=UTF-8");
        viewResolver.setCache(false);
        return viewResolver;
    }
 
}


MessageWebApplicationInitializer.class
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import com.mysprinttestsecurity.security.SecurityConfig;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
 
public class MessageWebApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
 
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class<?>[] { RootConfiguration.class, SecurityConfig.class };
    }
 
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class<?>[] { FreeMarkerConfig.class };
    }
 
    @Override
    protected String[] getServletMappings() {
        return new String[] { "/" };
    }
 
}


RootConfiguration.class
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
import com.mysprinttestsecurity.security.SecurityConfig;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
 
@Configuration
@Import(SecurityConfig.class)
public class RootConfiguration {
 
}


SQLConfig.class
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
 
import javax.sql.DataSource;
 
@Configuration
@ComponentScan("com.mysprinttestsecurity.dao")
public class SQLConfig {
 
    @Bean
    public JdbcTemplate getJdbcTemplate() {
        return new JdbcTemplate(dataSource());
    }
 
    @Bean
    public DataSource dataSource() {
        DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource();
        driverManagerDataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        driverManagerDataSource.setUrl("jdbc:mysql://localhost:3306/mysecurity?serverTimezone=UTC");
        driverManagerDataSource.setUsername("root");
        driverManagerDataSource.setPassword("1234");
        return driverManagerDataSource;
    }
}




package com.mysprinttestsecurity.controller;

HomeController.class
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import com.mysprinttestsecurity.dao.DaoUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
 
@Controller
public class HomeController {
 
    @Autowired
    DaoUser daoUser;
 
    @GetMapping("/")
    public String home () {
 
        System.out.println(daoUser.getByName("vasa").getName().toString());
        return "/home";
    }
 
}




package com.mysprinttestsecurity.dao;

DaoUser.class
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import com.mysprinttestsecurity.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.jdbc.core.JdbcTemplate;
 
@Repository
public class DaoUser {
 
    @Autowired
    public JdbcTemplate jdbcTemplate;
 
    public User getByName(String name) {
        String sql = "SELECT * FROM user WHERE name=?";
        return jdbcTemplate.queryForObject(sql, new UserMapper(), name);
    }
 
}


UserMapper.class
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import com.mysprinttestsecurity.entity.User;
import org.springframework.jdbc.core.RowMapper;
 
import java.sql.ResultSet;
import java.sql.SQLException;
 
public class UserMapper implements RowMapper<User> {
 
    public User mapRow(ResultSet resultSet, int i) throws SQLException {
        User user = new User();
        user.setName(resultSet.getString("name"));
        user.setPassword(resultSet.getString("password"));
        user.setRole(resultSet.getString("role"));
        return user;
    }
}




package com.mysprinttestsecurity.entity;

User.class
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
public class User {
 
    private int id;
    private String name;
    private String surname;
    private String email;
    private String password;
    private String role;
 
    public User() {
    }
 
    public int getId() {
        return id;
    }
 
    public void setId(int id) {
        this.id = id;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public String getSurname() {
        return surname;
    }
 
    public void setSurname(String surname) {
        this.surname = surname;
    }
 
    public String getEmail() {
        return email;
    }
 
    public void setEmail(String email) {
        this.email = email;
    }
 
    public String getPassword() {
        return password;
    }
 
    public void setPassword(String password) {
        this.password = password;
    }
 
    public String getRole() {
        return role;
    }
 
    public void setRole(String role) {
        this.role = role;
    }
}




package com.mysprinttestsecurity.security;

MessageSecurityWebApplicationInitializer .class
Кликните здесь для просмотра всего текста
Java
1
2
3
4
import org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer;
 
public class MessageSecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer {
}


SecurityConfig.class
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.core.userdetails.User;
 
import javax.sql.DataSource;
 
@EnableWebSecurity
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
 
    @Autowired
    public DataSource dataSource;
 
    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        // ensure the passwords are encoded properly
        User.UserBuilder user = User.builder();
        auth
                .jdbcAuthentication()
                .dataSource(dataSource)
                .withDefaultSchema()
                .withUser(user.username("user").password("{noop}password").roles("USER"))
                .withUser(user.username("admin").password("{noop}password").roles("USER","ADMIN"));
    }
}


или вот можно скачать
Security.zip

Помогите пожалуйста в решении данной задачи. А то встал как вкопанный.
Буду очень благодарен.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.02.2020, 13:34
Ответы с готовыми решениями:

@Autowired null pointer exception
При авторизации пользователя, в классе CustomUserDetailsService UserService не инициализируется, бросает NullPointerException В...

Проверка выражения на Exception и возвращение true/false
Можно ли проверить любое выражение на выдачу исключения? В моем случае если индекс массива при проверке вышел за границы, мне не нужно...

Исключение Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
Подскажите, отчего выдается исключение при нажатии на кнопку. Exception in thread &quot;AWT-EventQueue-0&quot; java.lang.NullPointerException...

18
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
17.02.2020, 16:27
ну написано же - бина нет, значит конфиг твой не работает. Значит надо смотреть, чем он отличается от других конфигов. Например другие есть в AbstractAnnotationConfigDispatcherServle tInitializer, а этого нет.
0
61 / 23 / 8
Регистрация: 27.07.2010
Сообщений: 496
18.02.2020, 14:27  [ТС]
Цитата Сообщение от xoraxax Посмотреть сообщение
ну написано же - бина нет, значит конфиг твой не работает. Значит надо смотреть, чем он отличается от других конфигов. Например другие есть в AbstractAnnotationConfigDispatcherServle tInitializer, а этого нет.
Я всё смотрел, даже добавил в него SQLConfig.class

Не знаю что там надо. Блин, весь инет перерыл, и фиг знает. Вроде как должно работать, а оно не хочет почему-то.
0
61 / 23 / 8
Регистрация: 27.07.2010
Сообщений: 496
20.02.2020, 11:24  [ТС]
Есть кто живой?
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
20.02.2020, 11:52
попробуй клин сделать перед билдом)
0
61 / 23 / 8
Регистрация: 27.07.2010
Сообщений: 496
20.02.2020, 16:35  [ТС]
Цитата Сообщение от neske Посмотреть сообщение
попробуй клин сделать перед билдом)
Делал.

Добавлено через 3 часа 57 минут
Кто нибудь может сделать примитивный простой рабочий пример? Только не на Spring Boot, а на Spring MVC.

Добавлено через 54 секунды
Только пожалуйста без ссылок, ссылками я могу сам закидать кого угодно.
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
20.02.2020, 16:46
Favorskij, брейкпоинтом вставал в метод где твой датасурс бин инитится? там все норм?
1
61 / 23 / 8
Регистрация: 27.07.2010
Сообщений: 496
20.02.2020, 18:52  [ТС]
Цитата Сообщение от neske Посмотреть сообщение
брейкпоинтом вставал в метод где твой датасурс бин инитится? там все норм?
Куда я его поставлю? Ошибка вылетает даже собратся не может.

Добавлено через 2 минуты
И не уменю я этими брекпоинтами пользоваться.
0
61 / 23 / 8
Регистрация: 27.07.2010
Сообщений: 496
21.02.2020, 14:39  [ТС]
Тут люди есть? Вообще живые есть? Или этот форум уже совсем помер?
0
 Аватар для Goongala
1022 / 562 / 185
Регистрация: 18.08.2013
Сообщений: 2,027
Записей в блоге: 2
22.02.2020, 08:54
Favorskij, тебе дали совет
Цитата Сообщение от neske Посмотреть сообщение
брейкпоинтом вставал в метод где твой датасурс бин инитится?
ты пытался это сделать?

Добавлено через 2 минуты
Цитата Сообщение от Favorskij Посмотреть сообщение
не уменю я этими брекпоинтами пользоваться.
Не умеешь — так учись. Лишним точно не будет

Добавлено через 19 минут
Если честно, я спринг почти не знаю, но, как мне кажется, @ComponentScan должна указывать на другой пакет
Java
1
@ComponentScan("com.mysprinttestsecurity.dao")
1
61 / 23 / 8
Регистрация: 27.07.2010
Сообщений: 496
22.02.2020, 13:06  [ТС]
Цитата Сообщение от Goongala Посмотреть сообщение
Если честно, я спринг почти не знаю, но, как мне кажется, @ComponentScan должна указывать на другой пакет
Дело точно не в этом. Пакет указан правильно.

Добавлено через 3 минуты
Цитата Сообщение от Goongala Посмотреть сообщение
Не умеешь — так учись. Лишним точно не будет
Всему своё время, но не сейчас. Есть вещи не совсем очевидные, которые даже дебагер не поможет если нет соответствующих знание того, что дебажишь.

Добавлено через 1 минуту
Поэтому люди и приходят иногда на форумы что спросить или попросить помощи в той или иной области.

Добавлено через 5 минут
Цитата Сообщение от Goongala Посмотреть сообщение
ты пытался это сделать?
Да делал. Видео показать?
0
528 / 263 / 70
Регистрация: 11.12.2016
Сообщений: 1,223
22.02.2020, 14:12
Favorskij, Я тоже как бы знаю только основы, потому скорее у меня вопросы а не замечания.
У вас
Java
1
2
3
4
@Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class<?>[] { RootConfiguration.class, SecurityConfig.class };
    }
при чем
Java
1
2
3
4
5
@Configuration
@Import(SecurityConfig.class)
public class RootConfiguration {
 
}
SecurityConfig получается прикрепляется дважды, а вот
Java
1
2
3
@Configuration
@ComponentScan("com.mysprinttestsecurity.dao")
public class SQLConfig {
SQLConfig эта конфигурация ни разу. Может не то в импорте? + SecurityConfig встречается в ошибке.
Может бин SQLConfig как конфигурационный и сканируется но позже, а вы его используете уже в корневой конфигурации, т.к. вам для SecurityConfig надо dataSource бин который обявляется в SQLConfig, и возможно поскольку этого бина не видно
и вы импортируете класс javax.sql.DataSource который потом нигде не используете, ошибка No qualifying bean of type 'javax.sql.DataSource' available: expected at least 1 bean which qualifies as autowire candidate. как бы намекает, что где-то ожидается бин dataSource который должен быть Autowired(required=true) и в тоже время у вас javax.sql.DataSource который как бы и является кандидатом на "быть тем самым" (здесь привязка к бину происходит не по названию а по типу, а эго тип DataSource).
Но это все фантазии человека который никогда не делал таких сложный конфигураций(импорт конфигураций, сэкурити и проч. у меня опыта 0!)
0
61 / 23 / 8
Регистрация: 27.07.2010
Сообщений: 496
22.02.2020, 15:58  [ТС]
Цитата Сообщение от ViktorFX Посмотреть сообщение
SQLConfig эта конфигурация ни разу
Странно, не знаю как так получилось, наверное когда создавал пост, произошла ошибка в написании.


Для чистоты, чтобы не возникало слишком много не нужных вопросов, я оставил в проекте всего 4 класса, то есть, четыре файла. И все они в одном пакете. Пакет называется com

Классы

MessageWebApplicationInitializer
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package com;
 
import org.springframework.core.annotation.Order;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
 
@Order(1)
public class MessageWebApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
 
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class<?>[]{ SecurityConfig.class };
    }
 
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class<?>[]{ SQLConfig.class };
    }
 
    @Override
    protected String[] getServletMappings() {
        return new String[] { "/" };
    }
 
}


SecurityConfig
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package com;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.configuration.*;
import org.springframework.security.core.userdetails.User;
 
import javax.sql.DataSource;
 
 
@EnableWebSecurity
public class SecurityConfig {
 
    @Autowired
    public DataSource dataSource;
 
    @Autowired
    public void configure(AuthenticationManagerBuilder auth) throws Exception {
        // ensure the passwords are encoded properly
        User.UserBuilder user = User.builder();
        auth
                .jdbcAuthentication()
                .dataSource(dataSource)
                .withDefaultSchema()
                .withUser(user.username("user").password("{noop}password").roles("USER"))
                .withUser(user.username("admin").password("{noop}password").roles("USER","ADMIN"));
    }
}


SecurityWebApplicationInitializer
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
package com;
 
import org.springframework.core.annotation.Order;
import org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer;
 
@Order(2)
public class SecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer {
 
}


SQLConfig
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package com;
 
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
 
import javax.sql.DataSource;
 
@Configuration
@ComponentScan("com")
public class SQLConfig {
 
    public SQLConfig() {
    }
 
    @Bean
    public DataSource dataSource() {
        DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource();
        driverManagerDataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        driverManagerDataSource.setUrl("jdbc:mysql://localhost:3306/mysecurity?serverTimezone=UTC");
        driverManagerDataSource.setUsername("root");
        driverManagerDataSource.setPassword("1234");
        return driverManagerDataSource;
    }
}


Ну и конечно же pom.xml

Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
 
    <groupId>com.concretepage</groupId>
    <artifactId>ConcretePage</artifactId>
    <version>1.0-SNAPSHOT</version>
 
    <build>
        <plugins>
 
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                    <encoding>${encoding}</encoding>
                </configuration>
            </plugin>
 
        </plugins>
    </build>
 
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <failOnMissingWebXml>false</failOnMissingWebXml>
        <java.version>1.8</java.version>
        <encoding>UTF-8</encoding>
    </properties>
 
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-framework-bom</artifactId>
                <version>5.2.3.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.security</groupId>
                <artifactId>spring-security-bom</artifactId>
                <version>5.2.2.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
 
 
    <dependencies>
 
<!--        Spring Security-->
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-core</artifactId>
        </dependency>
 
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-web</artifactId>
        </dependency>
 
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-config</artifactId>
        </dependency>
 
 
 
<!--        Spring Framework-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
        </dependency>
 
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
        </dependency>
 
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
        </dependency>
 
 
 
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
        </dependency>
 
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.19</version>
        </dependency>
 
    </dependencies>
 
</project>


А вот как обычно ошибка которая у меня появляется

Кликните здесь для просмотра всего текста
22-Feb-2020 23:50:12.016 WARNING [RMI TCP Connection(3)-127.0.0.1] org.springframework.context.support.Abst ractApplicationContext.refresh Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.Unsati sfiedDependencyException: Error creating bean with name 'securityConfig': Unsatisfied dependency expressed through field 'dataSource'; nested exception is org.springframework.beans.factory.NoSuch BeanDefinitionException: 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.anno tation.Autowired(required=true)}


Ну и последнее, это видео на всякий случай.
Кликните здесь для просмотра всего текста
0
61 / 23 / 8
Регистрация: 27.07.2010
Сообщений: 496
22.02.2020, 16:10  [ТС]
На всякий случай, прикреплю ещё сам проект
ConcretePage.zip
0
61 / 23 / 8
Регистрация: 27.07.2010
Сообщений: 496
22.02.2020, 16:32  [ТС]
Если мы посетим вот эту страничку https://docs.spring.io/spring-... spring-mvc и опустимся до пункта 16.1.1 там Spring говорит и показывает пример использования инструкций. Инструкции если ещё не использовался Spring в проекте и вторая инструкция, если Spring используется. Не совсем понимаю в моём примере какую инструкцию применить, но в любом случаи не одна и не вторая инструкция или пример не работает и в обоях случаях появляется одна и та-же ошибка.

Добавлено через 3 минуты
И самое что худшее, все примеры которые я нахожу в интернете, пусть они и не совсем подходящие, ОНИ не работают у меня. И мне всегда кажется что у меня руки не из того места растут.
0
528 / 263 / 70
Регистрация: 11.12.2016
Сообщений: 1,223
22.02.2020, 17:07
Лучший ответ Сообщение было отмечено Favorskij как решение

Решение

Favorskij, не знаю что делает @Order, но суть вопроса, хоть проект и изменился, почти та же : может (не знаю, предполагаю) инициализация getRootConfigClasses() происходит раньше getServletConfigClasses()?
Если это так, то вероятно SecurityConfig просто не может сделать Autowired еще не созданного бина dataSource в классе SQLConfig?
1
61 / 23 / 8
Регистрация: 27.07.2010
Сообщений: 496
22.02.2020, 18:10  [ТС]
Цитата Сообщение от ViktorFX Посмотреть сообщение
не знаю что делает @Order, но суть вопроса, хоть проект и изменился, почти та же : может (не знаю, предполагаю) инициализация getRootConfigClasses() происходит раньше getServletConfigClasses()?
Да getRootConfigClasses инитится первым. Ок. Я понимаю что вы хотите сказать, что поместив SQLConfig.class в getRootConfigClasses он заинитится тогда когда нужно, и соответственно бин создатся и по идее все должно пройти, ну может не совсем гладко, но пройти куда та там дальше. Ок. Я так и сделал. Выскакивает ошибка, и такое ощущение что он совсем погнал
Кликните здесь для просмотра всего текста
23-Feb-2020 01:41:21.452 WARNING [RMI TCP Connection(3)-127.0.0.1] org.springframework.context.support.Abst ractApplicationContext.refresh Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCr eationException: Error creating bean with name 'springSecurityFilterChain' defined in org.springframework.security.config.anno tation.web.configuration.WebSecurityConf iguration: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiat ionException: Failed to instantiate [javax.servlet.Filter]: Factory method 'springSecurityFilterChain' threw exception; nested exception is org.springframework.jdbc.datasource.init .ScriptStatementFailedException: Failed to execute SQL script statement #1 of class path resource [org/springframework/security/core/userdetails/jdbc/users.ddl]: create table users(username varchar_ignorecase(50) not null primary key,password varchar_ignorecase(500) not null,enabled boolean not null); nested exception is java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'varchar_ignorecase(50) not null primary key,password varchar_ignorecase(500) not' at line 1


Добавлено через 27 минут
С этой ошибкой я уже завтра буду разбираться, и надеюсь завтра она решится и она-же будет последняя в этом вопросе. А пока, пока, до завтра. А то у меня уже третий час ночи.
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
22.02.2020, 18:12
Favorskij, о ты наконец то сообразил сделать то, о чем я тебе в первом же сообщении написал? ) Это определенно прогресс.
Теперь надо учиться читать, думать и гуглить.
Цитата Сообщение от Favorskij Посмотреть сообщение
check the manual that corresponds to your MySQL server version for the right syntax
но ты, конечно, не подумал, что может быть будет полезно рассказать нам какую бд ты используешь.
Цитата Сообщение от Favorskij Посмотреть сообщение
Failed to execute SQL script statement #1 of class path resource [org/springframework/security/core/userdetails/jdbc/users.ddl]
берем вот это, вставляем в гугл, читаем и пытаемся понять.
Еще, скорее всего, поможет почитать стэктрейс. Но это вообще невыполнимая задача.
1
61 / 23 / 8
Регистрация: 27.07.2010
Сообщений: 496
23.02.2020, 11:35  [ТС]
В общем как я понял из документации Spring Security, Spring для того примера использует HSQLDB https://docs.spring.io/spring-... dix-schema.

Далее как я понимаю Spring пытается создать таблицу users

SQL
1
2
3
4
5
CREATE TABLE users(
    username varchar_ignorecase(50) NOT NULL PRIMARY KEY,
    password varchar_ignorecase(50) NOT NULL,
    enabled BOOLEAN NOT NULL
);
и для этого он делает запросы на адрес указанные в DataSource, а там указано jdbc:mysql://localhost:3306/mysecurity , то есть, он делает запросы в MySQL, а MySQL не понимает синтаксиса которые получает, и соответственно отвергает. Но может быть не прям так, но суть такая SQLSyntaxErrorException.

Ну думаю Ок.
Скачал я этот HSQLDB. Благо оказалось там всё просто. В общем создал я таблицу из документации Spring Security https://docs.spring.io/spring-... ser-schema, подключил к этой таблице intellij idea для пущей убедительность что она работает.

Далее я изменил SQLConfig.class следующим образом:

Кликните здесь для просмотра всего текста
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package com;
 
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
 
import javax.sql.DataSource;
 
@Configuration
@ComponentScan("com")
public class SQLConfig {
 
    public SQLConfig() {
    }
 
    @Bean
    public DataSource dataSource() {
        DriverManagerDataSource driverManagerDataSource = NEW DriverManagerDataSource();
        driverManagerDataSource.setDriverClassName("org.hsqldb.jdbcDriver");
        driverManagerDataSource.setUrl("jdbc:hsqldb:file:D:/Developer/HSQL/MYDB/mydb");
        driverManagerDataSource.setUsername("root");
        driverManagerDataSource.setPassword("1234");
        RETURN driverManagerDataSource;
    }
}


Далее запускаю проект и получаю следующую ошибку

Кликните здесь для просмотра всего текста
23-Feb-2020 17:45:33.655 WARNING [RMI TCP Connection(3)-127.0.0.1] org.springframework.context.support.Abst ractApplicationContext.refresh Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.Unsati sfiedDependencyException: Error creating bean with name 'securityConfig': Unsatisfied dependency expressed through field 'dataSource'; nested exception is org.springframework.beans.factory.BeanCr eationException: Error creating bean with name 'dataSource' defined in com.SQLConfig: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiat ionException: Failed to instantiate [javax.sql.DataSource]: Factory method 'dataSource' threw exception; nested exception is java.lang.IllegalStateException: Could not load JDBC driver class [org.hsqldb.jdbc.JDBCDriver]


Из данной ошибки можно понять что - Could not load JDBC driver class [org.hsqldb.jdbcDriver], то есть, не может загрузить клас дривер. А зависимость я добавил

XML
1
2
3
4
5
        <dependency>
            <groupId>org.hsqldb</groupId>
            <artifactId>hsqldb</artifactId>
            <version>2.5.0</version>
        </dependency>
Добавлено через 38 минут
Все, заработало, разобрался. Заработаало. Сейчас напишу что было

Добавлено через 20 минут
Всем спасибо. кто принимал участие. Независимо от вероисповедания.

Первое что хотелось бы отметит, почему я шел не по правильному пути, а именно, SQLConfig.class был указан не в том методе в котором он должен быть указан. Если бы он сразу был в нужном методе

Java
1
2
3
4
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class<?>[]{ SQLConfig.class };
    }
то я бы не застрял на этом так долго. А всё потому, что когда то, я помню, у меня не хотел запускаться проект, только потому, что этот самый SQLConfig.class был в выше указанном методе, и, именно поэтому я всегда указывал SQLConfig.class его в этом методе

Java
1
2
3
4
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return null;
    }
Для меня это было странно, но всё же, именно поэтому я его указывал не там где надо. И это блин нафиг печально.

Теперь по поводу последней ошибки. Да, Spring пытается создать таблицу. Но если таблица уже есть, то она не создаться, а просто вернёт ошибку. Поэтому я из папки D:\Developer\HSQL\MYDB удалял все что там есть и просто запустил, и все сработало, таблица создалась и все ок.

Ещё раз всем без исключения огромное спасибо. И всех вас с праздником 23 февраля.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.02.2020, 11:35
Помогаю со студенческими работами здесь

Исключение Argument Exception
Программа должна открывать txt, rtf, файлы без расширения и файлы с созданным мною расширением, ( что-то вроде (.lala) ). Но фильтры я...

Исключение unknown software exception 0xc0000409
Здравствуйте, уважаемые форумчане! Может ли кто-то проконсультировать меня в следующем вопросе: Два дня назад стали периодически (при...

Не получается перехватить исключение, унаследованное от std::exception
#include &lt;iostream&gt; #include &lt;stdexcept&gt; #include &lt;sstream&gt; using namespace std; class BadInt : exception { ...

исключение unknown software exception (0x0000094) в приложении по адресу
Помогите решить проблему,при работе проекта выдает сообщение об ошибке&quot;исключение unknown software exception (0x0000094) в приложении по...

Ошибка "Поле не может содержние Null, так как свойство Required имеет значение True"
Когда пытаюсь заполнить таблицу из edit в БД (dbgrid) выдает ошибку &quot;Поле не может содержние Null , так как свойство Required имеет...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru