Конфигурация Spring Security - HttpSecurity против WebSecurity - PullRequest
1 голос
/ 31 мая 2019

Мне просто нужно кое-что понять в Spring Security Configuration.Используя приведенный ниже пример ...

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

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

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

}

Какова цель метода configure(WebSecurity web)?

Разве я не могу просто добавить /resources/** в метод configure(HttpSecurity http) в этой строке .authorizeRequests().antMatchers("/**", "/resources/**").permitAll(); Разве он не должен работать одинаково, то есть разрешать все запросы на /resources/** без какой-либо аутентификации?

Ответы [ 3 ]

3 голосов
/ 31 мая 2019

Общее использование метода WebSecurity ignoring() Опускает Spring Security , и ни одна из функций Spring Security не будет доступна. WebSecurity базируется выше HttpSecurity.

@Override
public void configure(WebSecurity web) throws Exception {
    web
        .ignoring()
        .antMatchers("/resources/**")
        .antMatchers("/publics/**");
}

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
        .authorizeRequests()
        .antMatchers("/admin/**").hasRole("ADMIN")
        .antMatchers("/publics/**").hasRole("USER") // no effect
        .anyRequest().authenticated();
}

WebSecurity в приведенном выше примере позволяет Spring игнорировать /resources/** и /publics/**. Поэтому .antMatchers("/publics/**").hasRole("USER") в HttpSecurity без рассмотрения .

Это полностью исключит шаблон запроса из цепочки фильтров безопасности. Обратите внимание, что на все, что идет по этому пути, не будут применяться службы аутентификации или авторизации, и они будут свободно доступны.

configure(HttpSecurity) позволяет настраивать сетевую безопасность на уровне ресурсов на основе соответствия выбора - например, В приведенном ниже примере URL-адреса, начинающиеся с /admin/, ограничиваются пользователями, имеющими роль ADMIN , и объявляет, что любые другие URL-адреса должны быть успешно аутентифицированы.

configure(WebSecurity) используется для параметров конфигурации, которые влияют на глобальную безопасность (игнорирование ресурсов, установка режима отладки, отклонение запросов путем реализации пользовательского определения брандмауэра). Например, следующий метод приведет к тому, что любой запрос, начинающийся с /resources/, будет игнорироваться для целей аутентификации .

1 голос
/ 31 мая 2019

При использовании HttpSecurity и попытке permitAll() запросов. Ваши запросы будут разрешены для доступа из цепочки фильтров Spring Security. Это дорого, так как будут запросы на другие запросы, которые также входят в эту цепочку фильтров, которые должны быть разрешены или запрещены на основе аутентификации / авторизации.

HttpSecurity.authorizeRequests().antMatchers("/**", "/resources/**").permitAll();

Но когда вы используете, любые запросы к resources будут полностью проходить цепочку фильтров безопасности Spring вместе. Это безопасно, потому что вам не нужна никакая аутентификация / авторизация, чтобы увидеть изображение или прочитать файл javascript.

WebSecurity.ignoring().antMatchers("/resources/**");
0 голосов
/ 31 мая 2019

configure (HttpSecurity): позволяет настраивать сетевую безопасность для определенных запросов http.Он используется для настройки веб-безопасности на уровне ресурсов на основе соответствия выбора.

configure (WebSecurity): позволяет добавлять экземпляры RequestMatcher, которые Spring Security должен игнорировать.

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