Хто-небудь може пояснити, коли слід перекривати 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()
деякий час тому.