Как добавить диалект SQL в источник данных в Spring Security Project - PullRequest
0 голосов
/ 27 мая 2020

Я работаю над проектом Spring (не Spring Boot), и я добавил Spring Security для этого приложения. Все нормально работает.

Однако я нашел учебник, в котором сам код инструктирует Spring создать таблицы базы данных, необходимые для обеспечения безопасности, и заполнить определенные данные. Вот как выглядит код:

@Configuration
@EnableWebSecurity
public class DemoSecurityConfig extends WebSecurityConfigurerAdapter
{
    @Autowired
    private DataSource securityDataSource;

    @Override
    protected void configure( AuthenticationManagerBuilder auth ) throws Exception
    {
        // Using JDBC Authentication
        auth.jdbcAuthentication().dataSource( securityDataSource )
            .withDefaultSchema()
            .withUser( User.withUsername( "USER" )
                           .password( "USER" )
                           .roles( "USER" ) )
            .withUser( User.withUsername( "ADMIN" )
                           .password( "ADMIN" )
                           .roles( "USER", "ADMIN" ) );

    }

    @Bean
    public PasswordEncoder passwordEncoder(){
       return NoOpPasswordEncoder.getInstance();
    }

    // http authorization code goes here
}

Вот как мой Datasource объект создается в классе конфигурации.

@Bean
public DataSource securityDataSource()
{
    ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();
    try
    {
        comboPooledDataSource.setDriverClass( env.getProperty( "jdbc.driver" ) );

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

        comboPooledDataSource.setInitialPoolSize( Integer.parseInt( env.getProperty( "connection.pool.initialPoolSize" ) ) );
        comboPooledDataSource.setMinPoolSize( Integer.parseInt( env.getProperty( "connection.pool.minPoolSize" ) ) );
        comboPooledDataSource.setMaxPoolSize( Integer.parseInt( env.getProperty( "connection.pool.maxPoolSize" ) ) );
        comboPooledDataSource.setMaxIdleTime( Integer.parseInt( env.getProperty( "connection.pool.maxIdleTime" ) ) );
    }
    catch( Exception e )
    {
        e.printStackTrace();
    }
    return comboPooledDataSource;
}

Когда я запускаю приложение, я получаю следующую ошибку. Я использую базу данных MySQL

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

Ошибка верна, потому что этот тип SQL не поддерживается MySQL. Как я могу настроить свой источник данных для использования диалекта MySQL. Нашел это от пружины c. Пожалуйста, помогите мне разобраться с этой проблемой.

Я тоже прикрепил помпон.

   <dependencies>
        <!--spring and spring MVC dependencies-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>javax.annotation</groupId>
            <artifactId>javax.annotation-api</artifactId>
            <version>1.3.2</version>
        </dependency>

        <!--spring security dependencies-->
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-web</artifactId>
            <version>${spring.security.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-config</artifactId>
            <version>${spring.security.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-taglibs</artifactId>
            <version>${spring.security.version}</version>
        </dependency>

        <!--hibernate dependencies-->
        <dependency>
            <groupId>org.hibernate.validator</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>${hibernate.validator.version}</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>${hibernate.core.version}</version>
        </dependency>
        <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>${javax.validation.api.version}</version>
        </dependency>
        <dependency>
            <groupId>javax.activation</groupId>
            <artifactId>activation</artifactId>
            <version>${javax.activation.version}</version>
        </dependency>
        <dependency>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
            <version>2.3.1</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jaxb</groupId>
            <artifactId>jaxb-core</artifactId>
            <version>2.3.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jaxb</groupId>
            <artifactId>jaxb-runtime</artifactId>
            <version>2.3.2</version>
        </dependency>
        <dependency>
            <groupId>com.mchange</groupId>  <!-- This dependency used for hibernate connection pools -->
            <artifactId>c3p0</artifactId>
            <version>${c3po.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${spring.orm.version}</version>
        </dependency>

        <!--AspectJ dependencies for AOP-->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>${aspectj.weaver.aop.version}</version>
        </dependency>

        <!--servlet dependencies-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>${javax.servlet.api.version}</version>
        </dependency>

        <!--JSP dependencies -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>${jstl.version}</version>
        </dependency>

        <!--mysql dependencies-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.connector.version}</version>
        </dependency>

        <!--testing dependencies-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
...