Я работаю над проектом 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>