簡體   English   中英

如何使用SpringSecurity和JDBI

[英]How to use SpringSecurity and JDBI

我正在嘗試使用Spring配置服務器。 我想同時使用Spring安全性和JDBI。 因此,我已經配置了服務器(?)的數據源並將其鏈接到JDBI。 但是我無法在WebSecurityConfig中使用此數據源。

這是我的主要配置java文件:

    @SpringBootApplication
    @EnableAutoConfiguration
    public class Application extends WebMvcConfigurerAdapter {

       private static DBI dbi = null;

       public static void main(String[] args) {
           SpringApplication.run(Application.class, args);
       }


       static DBI getDbi() {
           if(dbi == null) {
               DataSource ds = JdbcConnectionPool.create("jdbc:h2:mem:test", "ndl", "ndl");
               dbi = new DBI(ds);
           }
           return dbi;
       }
    }

這是安全彈簧的文件

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private DataSource dataSource;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .antMatchers("/", "/home").permitAll()
                .anyRequest().authenticated()
                .and()
                .formLogin()
                .loginPage("/login.html")
                .permitAll()
                .and()
                .logout()
                .permitAll();
        http.csrf().disable();
    }

    @Autowired
    public void configAuthentication(AuthenticationManagerBuilder auth) throws Exception {
        auth.jdbcAuthentication().dataSource(dataSource)
                .usersByUsernameQuery(
                        "select username,password from users where username=?")
                .authoritiesByUsernameQuery(
                        "select username, role from users where username=?");
    }

}

我得到了這個錯誤。

Field dataSource in rest.WebSecurityConfig required a bean of type 'javax.sql.DataSource' that could not be found.

我試圖在類中(而不是在方法中)編寫DataSource ds。 並添加注釋@Bean。 但是我有另一個錯誤

   public static DataSource ds = JdbcConnectionPool.create("jdbc:h2:mem:test", "ndl", "ndl");

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @Bean
    public static DataSource getDataSource(){
        return ds;
    }

和錯誤

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'webSecurityConfig': Injection of autowired dependencies failed; nested exception is java.lang.NoClassDefFoundError: org/springframework/jdbc/core/support/JdbcDaoSupport

希望您有任何想法...謝謝;)

發現問題。

我錯過了以下依賴項:spring-jdbc

所以我最后的build.gradle是

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:1.5.8.RELEASE")
    }
}

apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'

jar {
    baseName = 'gs-rest-service'
    version =  '0.1.0'
}

repositories {
    mavenCentral()
    maven {
        url 'https://repo.spring.io/libs-milestone'
    }
}

sourceCompatibility = 1.8
targetCompatibility = 1.8

dependencies {
    compile("org.springframework.boot:spring-boot-starter-web")
    testCompile('org.springframework.boot:spring-boot-starter-test')
    compile("org.springframework.boot:spring-boot-starter-security")
    testCompile("org.springframework.security:spring-security-test")
    compile group: 'org.jdbi', name: 'jdbi', version: '2.4.2'
    compile group: 'com.h2database', name: 'h2', version: '1.3.148'
    compile group: 'org.springframework', name: 'spring-jdbc', version: '4.3.8.RELEASE'
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM