Разница между веб-игнорированием и разрешением Http в Spring Security? - PullRequest
2 голосов
/ 12 апреля 2019

В чем разница между этими двумя методами?

 @Override
protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests().antMatchers("/api/**").permitAll();
}

@Override
public void configure(WebSecurity web) {
    web.ignoring().antMatchers("/api/**");
}

В классе конфигурации безопасности Spring, когда я использую класс HttpSecurity, он по-прежнему дает мне 403 запрета, но когда я использую класс WebSecurity, он проходит нормально? Это почему? Я чувствую, что едва контролирую, что разрешено и что нужно авторизовать с помощью фильтра.

Ответы [ 2 ]

3 голосов
/ 12 апреля 2019

Предлагаю вам ознакомиться с этой статьей: Spring Security Java Config Preview: Web Security Отличия двух подходов от ваших кодов:

  • HttpSecurity позволяет настроить веб-безопасность для HTTP-запросов.На этом уровне вы объявляете правила аутентификации.
  • WebSecurity позволяет конфигурировать вещи, которые оказывают глобальное влияние на всю веб-безопасность, такие как установка режима отладки или включение дополнительного брандмауэраконфигурация с использованием реализации HttpFirewall или просто игнорирование ресурсов, как показывает ваш код.

Возможно, вас заинтересует 3-й configure методиз WebSecurityConfigurerAdapter, который использует:

  • AuthenticationManagerBuilder, который включает и обеспечивает механизм аутентификации, такой как аутентификация на основе LDAP или на основе JDBC.
0 голосов
/ 12 апреля 2019

Это немного абстрактный вопрос, и есть немного абстрактный ответ.

  1. [flow 1] Представьте себе большое офисное здание, на первом этаже которого находится главный ресепшн, который на первом этаже можно пропустить в зданиеи если вы хотите пойти в компанию, скажем, B , они приведут вас туда, но они не могут впустить вас в офис любой компании, потому что они честны, и у каждого офиса есть свой прием и когдаВы пришли на приемную в офисе B , в которой вам нужно будет пройти аутентификацию (просто гость, аноним, который хочет видеть свой офис, работника / пользователя, администратора и т. д.), и только они могут, если онивпустим вас в любого отца.

  2. [flow 2] Представьте также, что в том же большом офисном здании есть ресторан / магазин / туалет, когда вы приходите вГлавный ресепшн на первом этаже и спросите их, где находится ресторан, они приведут вас туда, вы не должны здесь проходить аутентификацию, они не знают, кто вы, и не должны: web.ignoring().antMatchers("/restaurant/**");

  3. [поток3] Представьте себе, что в том же большом офисном здании есть компания C , которая решила открыть галерею на своем этаже (в одной комнате, а не во всем офисе)

    • они спросили у главной стойки регистрации на первом этаже «если кто-нибудь придет посмотреть нашу галерею, просто впустите их туда без аутентификации на нашем приеме» web.ignoring().antMatchers("/C/gallery/**");
    • и они могут сделать другой способ обработать поток 1 и когда человек придет к их стойке регистрации и скажет, что хочет посмотреть их галерею, они просто впустят их без аутентификации http.authorizeRequests().antMatchers("/C/gallery/**").permitAll();

    В обоих случаях результатбудет таким же, посетитель увидит галерею компании C , но в потоке с http задействовано много шагов / персон / (фильтров в случае Spring Security) - это немного медленнее инет необходимости в статических ресурсах.

Главный прием на первом этаже - это - WebSecurity Это только один прием во всем приложении / здании.

Прием любой компанииэто WebSecurityConfigurerAdapter (у каждого WebSecurityConfigurerAdapter есть только один HttpSecurity), вы можете иметь их столько, сколько пожелаете, и у каждого из них может быть полностью отдельный поток аутентификации, требования безопасности и т. д., но все они могут спроситьWebSecurity для предоставления доступа к некоторым ресурсам кому-либо без какой-либо аутентификации.WebSecurity даже не знает, как аутентифицировать пользователя - такой опции нет.

Подводя итог вашему вопросу, эти два подхода должны дать одинаковый эффект, если нет, это означает, что WebSecurityConfigurerAdapter имеет некоторыедополнительная конфигурация (по умолчанию ex crsf и т. д.), которая также меняет поведение WebSecurityConfigurerAdapter, по умолчанию имеет ExceptionTranslationFilter, которая перехватывает исключения безопасности и возвращает соответствующий статус (401, 403).Чтобы дать вам лучший ответ, вы должны предоставить более подробную информацию.Создайте новый проект только с указанной конфигурацией, отключите http.csrf().disable().

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