HttpSecurity, WebSecurity ve AuthenticationManagerBuilder


Yanıtlar:


125

configure (AuthenticationManagerBuilder) , AuthenticationProviders'ın kolayca eklenmesine izin vererek bir kimlik doğrulama mekanizması oluşturmak için kullanılır: örn. Aşağıdaki, yerleşik 'kullanıcı' ve 'yönetici' oturum açma bilgileriyle bellek içi kimlik doğrulamayı tanımlar.

public void configure(AuthenticationManagerBuilder auth) {
    auth
        .inMemoryAuthentication()
        .withUser("user")
        .password("password")
        .roles("USER")
    .and()
        .withUser("admin")
        .password("password")
        .roles("ADMIN","USER");
}

configure (HttpSecurity) , bir seçim eşleşmesine dayalı olarak bir kaynak düzeyinde web tabanlı güvenliğin yapılandırılmasına izin verir - örn. Aşağıdaki örnek, / admin / ile başlayan URL'leri ADMIN rolüne sahip kullanıcılarla sınırlar ve diğer URL'lerin olması gerektiğini bildirir başarıyla doğrulandı.

protected void configure(HttpSecurity http) throws Exception {
    http
        .authorizeRequests()
        .antMatchers("/admin/**").hasRole("ADMIN")
        .anyRequest().authenticated()
}

configure (WebSecurity) , genel güvenliği etkileyen yapılandırma ayarları için kullanılır (kaynakları yoksayma, hata ayıklama modunu ayarlama, özel bir güvenlik duvarı tanımı uygulayarak istekleri reddetme). Örneğin, aşağıdaki yöntem, / kaynaklar / ile başlayan herhangi bir isteğin kimlik doğrulama amacıyla yok sayılmasına neden olur.

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

Daha fazla bilgi için aşağıdaki bağlantıya başvurabilirsiniz Spring Security Java Config Preview: Web Security


2
Güzel cevap Nick. Spring-security-config-5.0.3 ile (Spring-boot 2.0.0 ile birlikte gelir) yöntemi bulamadım http.authorizeUrls(), belki http.authorizeRequests()bir süre önce yeniden adlandırıldı .
Yi Ou

5
Bunun eski olduğunu biliyorum, ama buradaki en iyi uygulama nedir? Http.antMatchers ("/ foo"). PermitAll () "çağrısı yapan configure (HttpSecurity http) yöntemi uygulamalarının örneklerini buldum. web) yöntemi.
chrisinmtown

mükemmel cevap. HttpSecurity'de permitAll'ı çağırmamız gerekip gerekmediğini merak ediyorum. WebSecurity kullanarak tüm açık url'leri / register veya / login gibi görmezden gelemez miyiz? Öyleyse neden tüm öğreticiler veya yanıtlar / register ve / login için HttpSecurity.permitAll, ancak / publics of / resources için WebSecurity.ingore kullanıyor? -
Mohd Waseem

3

WebSecurity ignoring()yönteminin genel kullanımı, Spring Security'yi ihmal eder ve Spring Security'nin hiçbir özelliği kullanılamaz. WebSecurity, HttpSecurity'e dayanmaktadır.

@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();
}

Yukarıdaki örnekte WebSecurity, Spring'in /resources/**ve /publics/**. Bu nedenle, .antMatchers("/publics/**").hasRole("USER")HttpSecurity'de dikkate alınmaz .

Bu, istek modelini güvenlik filtresi zincirinden tamamen çıkaracaktır. Bu yolla eşleşen herhangi bir şeyin, hiçbir kimlik doğrulama veya yetkilendirme hizmetinin uygulanmayacağını ve serbestçe erişilebileceğini unutmayın.

configure(HttpSecurity) web tabanlı güvenliğin yapılandırılmasına izin verir. bir seçim eşleşmesine dayalı olarak kaynak düzeyinde - örn. Aşağıdaki örnek /admin/, ADMIN rolüne sahip kullanıcılarla başlayan URL'leri kısıtlar ve diğer URL'lerin başarıyla doğrulanması gerektiğini bildirir .

configure(WebSecurity) yapılandırma ayarları için kullanılır genel güvenliği etkileyen (kaynakları yoksayma, hata ayıklama modunu ayarlama, özel bir güvenlik duvarı tanımı uygulayarak istekleri reddetme). Örneğin, aşağıdaki yöntemi ile başlayan herhangi bir isteği neden olacak /resources/olan kimlik için göz ardı amaçlar.

AuthenticationManagerBuilder
extends AbstractConfiguredSecurityBuilder<AuthenticationManager,AuthenticationManagerBuilder>
implements ProviderManagerBuilder<AuthenticationManagerBuilder>

SecurityBuilder bir AuthenticationManager. Bellek kimlik doğrulaması, LDAP kimlik doğrulaması, JDBC tabanlı kimlik doğrulama, UserDetailsService ekleme ve AuthenticationProvider'lar eklemeyi kolayca oluşturmaya izin verir .

@Override
     protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication().withUser("user").password("password").roles("USER"); 
        auth.userDetailsService(customUserDetailService).passwordEncoder(new BCryptPasswordEncoder());
     }

mükemmel cevap. HttpSecurity'de permitAll'ı çağırmamız gerekip gerekmediğini merak ediyorum. WebSecurity kullanarak tüm açık url'leri / register veya / login gibi görmezden gelemez miyiz? Öyleyse neden tüm öğreticiler veya yanıtlar / register ve / login için HttpSecurity.permitAll, ancak / publics of / resources için WebSecurity.ingore kullanıyor?
Mohd Waseem
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.