Как запретить доступ ко всем URL-адресам по умолчанию?

При определении новых ресурсов REST для весенней загрузки я часто забываю также создать конфигурацию безопасности Spring для их шаблонов URL.

Как я могу по умолчанию запретить доступ ко всем URL-адресам и разрешить доступ только к явно настроенным шаблонам URL-адресов? (Я использую .hasRole для разрешения доступа) Я хочу избежать как можно большего количества непреднамеренных дыр в безопасности.

Допустим, у меня есть три ресурса REST: /jobs, /desks и /salary. Мой текущий код может выглядеть так:

http.authorizeRequests()

    .antMatchers(HttpMethod.GET, "/jobs")
    .hasRole("my_user")

    .antMatchers(HttpMethod.GET, "/desks")
    .hasRole("my_user");

Но в настоящее время доступ к url ​​/salary предоставляется всем (потому что он еще не настроен)!

http.authorizeRequests().antMatchers("/admin/**") .access("hasRole('ADMIN')" позволяет все, кроме всего, что следует за адресом администратора? А может http.authorizeRequests() .antMatchers("/admin*/**").authenticated() .anyRequest().permitAll() .and() .csrf().disable();?
achAmháin 17.07.2018 17:54

Если они начинаются с одного и того же шаблона, например: / api / ..., вы можете запретить эти шаблоны URL-адресов, используя безопасность Spring. В противном случае эти URL-адреса всегда открыты для пользователей.

Sumesh TG 18.07.2018 14:10
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
14
2
5 192
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вы можете отклонить все запросы по умолчанию с помощью: .anyRequest().denyAll() и явные запросы разрешения с .hasRole

Spring Контроль доступа на основе выражений имеет выражение denyAll, которое всегда оценивается как false.

Итак, что вы можете сделать, это использовать этот метод denyAll, чтобы запретить доступ ко всему, а затем, возможно, разрешить доступ к определенному URL-адресу через hasRole:

http.authorizeRequests().antMatchers("/admin/**").access("hasRole('ADMIN')").antMatchers("/**").denyAll();

Так, например, это позволит пользователям с доступом ADMIN получать доступ к любой странице, начиная с /admin. И тогда он запретит доступ ко всем остальным страницам. Обратите внимание, что порядок важен, так как если вы введете .antMatchers("/**").denyAll()первый, он запретит доступ все и проигнорирует остальную часть вашего выражения.

Или, в качестве альтернативы, вы можете использовать permitAll() для определенного шаблона URL:

http.authorizeRequests().antMatchers("/users/**").permitAll().antMatchers("/**").denyAll();

Просто обратите внимание, что вам может потребоваться разрешить доступ к какому-либо способу входа в систему, чтобы система могла позволить кому-то входить в систему с определенной ролью, чтобы объединить все это вместе и позволить всем попробовать войти в систему, только пользователи с правами администратора могут получить доступ страницы администратора и запретить все остальные, затем что-то вроде:

http.authorizeRequests().antMatchers("/login").permitAll().antMatchers("/admin/**").access("hasRole('ADMIN')").antMatchers("/**").denyAll();

anyRequest().denyAll() для отклонения всех запросов по умолчанию и .hasRole для явного разрешения запросов

Этот ответ почти идентичен ответу Макса.

slartidan 27.07.2018 08:41

Другие вопросы по теме