我在使用spring web安全和我的數據庫時遇到了一些問題。如果我使用Spring安全配置失敗
@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
}
它工作正常,但有時configureGlobal
被setDataSource
之前打來電話,我得到一個IllegalStateException
因爲dataSource
在使用前沒有被注入。
我想了解還有什麼需要使第一種方法的工作。
還有什麼辦法來控制@Autowired
的順序。將@DependsOn(DataSource)
添加到configureGlobal
不起作用。
嘗試把一個'Autowired'上'configure'方法。另外,您是否同時使用'configureGlobal'和'configure'? –
將自動裝配置於配置方法將與第二個方法相同,即注入'AuthenticationManagerBuilder',而不是覆蓋配置。配置建議在http://stackoverflow.com/questions/35218354/difference-between-registerglobal-configure-configureglobal-configureglo – dcsalmon
答案建議自動裝配作品除注射順序的問題,其中有時'AuthenticationManagerBuilder'注入之前'dataSource',但我會感興趣的是爲什麼配置似乎能夠工作,但配置的AuthenticationManagerBuilder不會被用於身份驗證。 – dcsalmon