Может кто - нибудь объяснить , когда переопределить configure(HttpSecurity)
, configure(WebSecurity)
а configure(AuthenticationManagerBuilder)
?
Может кто - нибудь объяснить , когда переопределить configure(HttpSecurity)
, configure(WebSecurity)
а configure(AuthenticationManagerBuilder)
?
Ответы:
configure (AuthenticationManagerBuilder) используется для установки механизма аутентификации, позволяя легко добавлять AuthenticationProvider: например, следующее определяет аутентификацию в памяти со встроенными логинами «пользователь» и «администратор».
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) используется для параметров конфигурации, которые влияют на глобальную безопасность (игнорировать ресурсы, устанавливать режим отладки, отклонять запросы путем реализации настраиваемого определения брандмауэра). Например, следующий метод приведет к тому, что любой запрос, начинающийся с / resources /, будет проигнорирован для целей аутентификации.
public void configure(WebSecurity web) throws Exception {
web
.ignoring()
.antMatchers("/resources/**");
}
Вы можете обратиться к следующей ссылке для получения дополнительной информации Spring Security Java Config Preview: 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 .
@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()
некоторое время назад.