簡體   English   中英

Spring安全配置失敗

[英]Spring Security Configuration Fails

我在Spring Web Security和數據庫方面遇到一些問題。 如果我用

@Configuration
@EnableWebSecurity
public class BBSecurity extends WebSecurityConfigurerAdapter {
    @Autowired
    public void setDataSource(DataSource dataSource) {
        this.dataSource = dataSource;
    }

    @Override
    public void configure(AuthenticationManagerBuilder auth) throws Exception {
        JdbcUserDetailsManagerConfigurer<AuthenticationManagerBuilder> cfg = auth.jdbcAuthentication();
        cfg.dataSource(dataSource);
        cfg.usersByUsernameQuery("SELECT user_name, password, true FROM user_data WHERE user_name=?");
        cfg.passwordEncoder(new MyPasswordEncoder());
        cfg.authoritiesByUsernameQuery("SELECT user_name, concat('ROLE_',role) FROM user_data WHERE user_name=?");
     }
}

該方法已成功調用,但是在日志中我看到了

Using default security password: 81456c65-b6fc-43ee-be41-3137d02b122b

而且我的數據庫代碼從未使用過。

相反,如果我使用(在同一堂課中)

@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception 
    JdbcUserDetailsManagerConfigurer<AuthenticationManagerBuilder> cfg = auth.jdbcAuthentication();
    ... same config code as above
 }

它工作正常,但是有時在setDataSource之前調用configureGlobal ,並且我得到一個IllegalStateException因為在使用dataSource之前沒有注入它。

我想了解使第一種方法起作用所需的其他條件。

還有什么方法可以控制@Autowired的順序。 @DependsOn(DataSource)添加到configureGlobal無效。

使用字段注入而不是二傳手注入

@Configuration
@EnableWebSecurity
public class BBSecurity extends WebSecurityConfigurerAdapter {
    @Autowired private DataSource dataSource;

    @Override
    public void configure(AuthenticationManagerBuilder auth) throws Exception {
        // Same stuff
    }
}

或將Datasource直接注入configureGlobal方法:

@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth, DataSource dataSource) throws Exception {
    // same stuff
}

暫無
暫無

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

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