[英]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.