У меня возникли проблемы с весенней безопасностью и моей базой данных. Если я используюНе удалось создать конфигурацию Spring 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
}
он отлично работает, но иногда configureGlobal
вызывается перед setDataSource
и я получаю IllegalStateException
потому dataSource
не был введен, прежде чем он был использован.
Я хотел бы понять, что еще нужно для того, чтобы первый метод работал.
Также есть ли способ управления порядком @Autowired
. Добавление @DependsOn(DataSource)
в configureGlobal
не влияет.
Попытка поставить 'Autowired' на' configure' метод. Кроме того, вы использовали одновременно «configureGlobal» и «configure»? –
Помещение Autowired на метод configure будет таким же, как и второй метод, инъекцией «AuthenticationManagerBuilder», а не переопределением конфигурации. configure предлагается в ответе на http://stackoverflow.com/questions/35218354/difference-between-registerglobal-configure-configureglobal-configureglo – dcsalmon
Автообновленные работы, за исключением проблемы с порядком впрыска, где иногда «AuthenticationManagerBuilder» вводится до 'dataSource', но мне было бы интересно, почему configure работает, но настроенный' AuthenticationManagerBuilder' впоследствии не используется для аутентификации. – dcsalmon