Специальная схема Spring Security JDBC - PullRequest
0 голосов
/ 04 ноября 2019

Я хочу использовать свою собственную схему БД с Spring Security, сохраняя при этом большую часть кода платформы. Я хочу использовать postgres, где моя таблица пользователей находится в ее схеме: profiles.users. Моя конфигурация безопасности:

@Configuration
public class SecurityConfigDev extends WebSecurityConfigurerAdapter {

@Autowired
private UserDetailsService userDetailsService; 

@Autowired
private DataSource dataSource;

@Bean
public PasswordEncoder passwordEncoder() {
    return new BCryptPasswordEncoder();
}

// authentication
@Override
protected void configure(AuthenticationManagerBuilder authBuilder) throws Exception {
    authBuilder
    .jdbcAuthentication()
    .dataSource(dataSource)
    .usersByUsernameQuery("select username, password from profiles.users where username=?")
    .withUser(User
            .withUsername("username")
            .password(passwordEncoder().encode("username"))
            .roles("USER")
            )
    .and()
    .userDetailsService(userDetailsService)
    .passwordEncoder(passwordEncoder());
}
...
}

Я написал свой собственный UserService, который реализует UserDetailsService, который обрабатывает бизнес-логику, связанную с пользователем, получает данные из базы данных и правильно вводится.

Проблема в том, что фреймворк использует жестко закодированные запросы из JdbcUserDetailsManager, которые мне нужно изменить (я мог бы легко расширить этот класс, переопределить статические методы и внедрить его), поэтому в этом случае, я думаю, я бы просто расширил JdbcUserDetailsManagerс моими UserDetails?

JdbcUserDetailsManager:

// UserDetailsManager SQL
public static final String DEF_CREATE_USER_SQL = "insert into users (username, password, enabled) values (?,?,?)";
public static final String DEF_DELETE_USER_SQL = "delete from users where username = ?";
public static final String DEF_UPDATE_USER_SQL = "update users set password = ?, enabled = ? where username = ?";
public static final String DEF_INSERT_AUTHORITY_SQL = "insert into authorities (username, authority) values (?,?)";
public static final String DEF_DELETE_USER_AUTHORITIES_SQL = "delete from authorities where username = ?";
...etc...

Это был бы "правильный" способ сделать это? Кажется, на данный момент у меня есть два bean-компонента, которые реализуют userDetailsService, и, поскольку мой UserService внедряется в authBuilder, почему я не получаю некоторые ошибки времени компиляции с отсутствующими методами?

PS: У меня также есть UserRepositoryкоторый обрабатывает фактические запросы jdbc и который внедряется в UserService

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...