Alguém poderia explicar quando para substituir configure(HttpSecurity)
, configure(WebSecurity)
e configure(AuthenticationManagerBuilder)
?
Alguém poderia explicar quando para substituir configure(HttpSecurity)
, configure(WebSecurity)
e configure(AuthenticationManagerBuilder)
?
Respostas:
configure (AuthenticationManagerBuilder) é usado para estabelecer um mecanismo de autenticação, permitindo que AuthenticationProviders sejam adicionados facilmente: por exemplo, o seguinte define a autenticação na memória com os logins embutidos de 'usuário' e 'admin'.
public void configure(AuthenticationManagerBuilder auth) {
auth
.inMemoryAuthentication()
.withUser("user")
.password("password")
.roles("USER")
.and()
.withUser("admin")
.password("password")
.roles("ADMIN","USER");
}
configure (HttpSecurity) permite a configuração de segurança baseada na web em um nível de recurso, com base em uma combinação de seleção - por exemplo, o exemplo abaixo restringe os URLs que começam com / admin / para usuários que têm função ADMIN e declara que quaisquer outros URLs precisam ser autenticado com sucesso.
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/admin/**").hasRole("ADMIN")
.anyRequest().authenticated()
}
configure (WebSecurity) é usado para configurações que impactam a segurança global (ignorar recursos, definir modo de depuração, rejeitar solicitações implementando uma definição de firewall personalizada). Por exemplo, o método a seguir faria com que qualquer solicitação que comece com / resources / fosse ignorada para fins de autenticação.
public void configure(WebSecurity web) throws Exception {
web
.ignoring()
.antMatchers("/resources/**");
}
Você pode consultar o link a seguir para obter mais informações Spring Security Java Config Preview: Web Security
O uso geral do ignoring()
método WebSecurity omite o Spring Security e nenhum dos recursos do Spring Security estará disponível. WebSecurity é baseado em 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 no exemplo acima permite que o Spring ignore /resources/**
e /publics/**
. Portanto, o .antMatchers("/publics/**").hasRole("USER")
em HttpSecurity não é considerado .
Isso omitirá inteiramente o padrão de solicitação da cadeia de filtros de segurança. Observe que qualquer coisa que corresponda a este caminho não terá serviços de autenticação ou autorização aplicados e estará acessível gratuitamente.
configure(HttpSecurity)
permite a configuração de segurança baseada na web em um nível de recurso , com base em uma correspondência de seleção - por exemplo, O exemplo abaixo restringe os URLs que começam com /admin/
para usuários que têm função ADMIN e declara que quaisquer outros URLs precisam ser autenticados com sucesso.
configure(WebSecurity)
é usado para definições de configuração que afetam a segurança global (ignorar recursos, definir modo de depuração, rejeitar solicitações implementando uma definição de firewall personalizada). Por exemplo, o método a seguir faria com que qualquer solicitação iniciada com /resources/
seja ignorada para fins de autenticação .
AuthenticationManagerBuilder
extends AbstractConfiguredSecurityBuilder<AuthenticationManager,AuthenticationManagerBuilder>
implements ProviderManagerBuilder<AuthenticationManagerBuilder>
SecurityBuilder usado para criar um AuthenticationManager
. Permite criar facilmente autenticação de memória, autenticação LDAP, autenticação baseada em JDBC, adicionando UserDetailsService e adicionando 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()
, talvez ele tenha sido renomeado parahttp.authorizeRequests()
algum tempo atrás.