Настройки адресов в Spring Security игнорируются

210
28 марта 2018, 04:50

Дано:

Проект на spring. Подключена БД, в ней лежат юзеры, можно их запросить по адресу http://localhost:8080/users/all.

Задача:

Требовать логина при запросе юзеров, но пускать в корень.

Проблема:

Не получается никак настроить свободный доступ к /. Подключил security - теперь все пути выводят форму логина, куда я могу с данными юзеров из БД залогиниться, но никакие из испробованных способов не дают свободно на рут ходить.

Вопрос:

почему такое простое действие сложнее создания БД и АПИ к ней- как мне открыть рут для всех запросов?

В данный момент выглядит так конфигурация:

@Configuration
@EnableWebSecurity
class WebSecurityConfiguration : WebSecurityConfigurerAdapter() {
    @Autowired
    lateinit var dataSource: DataSource
    @Autowired
    @Bean
    fun passwordEncoder() = NoOpPasswordEncoder.getInstance() as NoOpPasswordEncoder
    override fun configure(auth: AuthenticationManagerBuilder) {
        auth
                .jdbcAuthentication()
                .dataSource(dataSource)
                .passwordEncoder(passwordEncoder())
    }
}

Пробовал настраивать пути по всякому, например так, но, кажется, всё что я пишу просто игнорируется:

override fun configure(http: HttpSecurity) {
    http
            .csrf().disable()
            .anonymous().disable()
            .antMatcher("/users/**").authorizeRequests()
    //и как только я не пробовал, ничего не меняется
}

Пробовал специальную штуку для игнорирования - она тоже не работает

override fun configure(webSecurity: WebSecurity) {
    webSecurity.ignoring().antMatchers("/")
}

или

override fun configure(webSecurity: WebSecurity) {
    webSecurity.ignoring().antMatchers("/**")
}

UPD_0:

Вот репозиторий со всем проектом: для запуска и работы надо поставить postgresql и создать там под юзером postgres с паролем testtest БД с именем springbootdb - далее при запуске в БД создана будет таблица с юзерами и туда будет добавлен юзер, под коим можно логиниться с логином test@test.ru и паролем password

Answer 1

У вас были 2 проблемы.

  1. У вас @CompnentScan был настроен так чтобы игнорировал все классы аннотированные @Configuration

    excludeFilters = [ComponentScan.Filter(type = FilterType.ANNOTATION, value = [Configuration::class])], это надо было удалить.

  2. Не были нужные зависимости для настройки Security, надо было добавить

    compile "org.springframework.boot:spring-boot-starter-security"

и собственно настройка самого spring-security:

override fun configure(http: HttpSecurity) {
    http
            .csrf().disable()
            .authorizeRequests()
                .antMatchers("/users/**").authenticated()
                .antMatchers("/**").permitAll()
        .and()
            .formLogin()
}
READ ALSO
Приоритеты операторов в записи в stack java

Приоритеты операторов в записи в stack java

Программа упрощенный калькуляторЕсть метод в котором сравниваются приоритеты математических операторов, но я не знаю как это сделать

159
Как разбить строку на слова и разделительные знаки?

Как разбить строку на слова и разделительные знаки?

Требуется чтобы массив содержал слова и знаки предложения на одном уровне, вроде:

153
Считывание данных из командной строки

Считывание данных из командной строки

Я написал программу при помощи Java, в которой есть главное окно для набора текста, окно для вывода сообщений и ошибок, а так же кнопка запуститьСвоеобразная...

162