Хто-небудь може пояснити, коли слід перекривати configure(HttpSecurity), configure(WebSecurity)і configure(AuthenticationManagerBuilder)?
Хто-небудь може пояснити, коли слід перекривати configure(HttpSecurity), configure(WebSecurity)і configure(AuthenticationManagerBuilder)?
Відповіді:
configure (AuthenticationManagerBuilder) використовується для встановлення механізму аутентифікації, дозволяючи легко додавати AuthenticationProviders: наприклад, нижче визначається автентифікація в пам'яті за допомогою вбудованих логін користувача та адміністратора.
public void configure(AuthenticationManagerBuilder auth) {
auth
.inMemoryAuthentication()
.withUser("user")
.password("password")
.roles("USER")
.and()
.withUser("admin")
.password("password")
.roles("ADMIN","USER");
}
configure (HttpSecurity) дозволяє конфігурувати захист на основі веб-ресурсів на рівні ресурсів на основі відповідності вибору - наприклад, наведений нижче приклад обмежує URL-адреси, які починаються з / admin /, на користувачів, які мають роль ADMIN, і заявляє, що будь-які інші URL-адреси повинні бути успішно пройшов автентифікацію.
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/admin/**").hasRole("ADMIN")
.anyRequest().authenticated()
}
configure (WebSecurity) використовується для налаштувань конфігурації, що впливають на глобальну безпеку (ігноруйте ресурси, встановіть режим налагодження, відхиляйте запити, застосовуючи спеціальне визначення брандмауера). Наприклад, наступний метод спричинить ігнорування будь-якого запиту, який починається з / ресурсів / для цілей аутентифікації.
public void configure(WebSecurity web) throws Exception {
web
.ignoring()
.antMatchers("/resources/**");
}
Щоб отримати додаткову інформацію, перейдіть за наступним посиланням Spring Security: Попередній перегляд налаштування Java: Web Security
Загальне використання ignoring()методу WebSecurity не забезпечує 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/бути проігноровані для аутентифікації цілей.
AuthenticationManagerBuilder
extends AbstractConfiguredSecurityBuilder<AuthenticationManager,AuthenticationManagerBuilder>
implements ProviderManagerBuilder<AuthenticationManagerBuilder>
SecurityBuilder, що використовується для створення AuthenticationManager. Дозволяє легко створювати автентифікацію пам'яті, автентифікацію LDAP, автентифікацію на основі JDBC, додаючи UserDetailsService та додаючи AuthenticationProvider's .
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication().withUser("user").password("password").roles("USER");
auth.userDetailsService(customUserDetailService).passwordEncoder(new BCryptPasswordEncoder());
}
http.authorizeUrls(), можливо, його перейменовано наhttp.authorizeRequests()деякий час тому.