Авторизация в Spring Security с БД
Как настроить авторизацию пользователей, получая данные из БД?
Предположим, я зарегистрировался, после чего хочу перейти на другую страницу. Меня перекидывает на /login. Ввожу данные и выходит ошибка:
Также вылетает ошибка в консоль:
PreparedStatementCallback; SQL [select username, password from users where username=?]; Индекс колонки вне диапазона: 3. Допустимые значения: 1..2
Ставил вместо username=? - username=user, и при регистрации вводил user.
Ничего не помогает.
@Configuration
public class WebSecurityConfig {
@Autowired private DataSource dataSource;
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests((requests) -> requests
.requestMatchers("/", "/home").permitAll()
.requestMatchers("/", "/register").permitAll()
.anyRequest().authenticated()
)
.formLogin((form) -> form
.loginPage("/login")
.permitAll()
)
.logout((logout) -> logout.permitAll());
return http.build();
}
@Bean
public UserDetailsManager users(DataSource dataSource) {
JdbcUserDetailsManager users = new JdbcUserDetailsManager(dataSource);
users.setUsersByUsernameQuery("select username, password from users where username=?");
return users;
}
}
Версия Spring - 3.1.0
База Данных - Postgresql
Ответы (1 шт):
Реализация JdbcUserDetailsManager ожидает три столбца в таблице users: имя пользователя, пароль и enabled, который вы можете использовать для деактивации пользователя.
Запрос по умолчанию - DEF_USERS_BY_USERNAME_QUERY; при изменении этого запроса убедитесь, что все возвращаемые столбцы отображаются на те же позиции столбцов, что и в запросе по умолчанию.
select username,password,'true' as enabled from users where username = ?
