¿Alguien podría explicar cuándo anular configure(HttpSecurity)
, configure(WebSecurity)
y configure(AuthenticationManagerBuilder)
?
¿Alguien podría explicar cuándo anular configure(HttpSecurity)
, configure(WebSecurity)
y configure(AuthenticationManagerBuilder)
?
Respuestas:
configure (AuthenticationManagerBuilder) se utiliza para establecer un mecanismo de autenticación al permitir que AuthenticationProviders se agreguen fácilmente: por ejemplo, lo siguiente define la autenticación en memoria con los inicios de sesión de 'usuario' y 'administrador' incorporados.
public void configure(AuthenticationManagerBuilder auth) {
auth
.inMemoryAuthentication()
.withUser("user")
.password("password")
.roles("USER")
.and()
.withUser("admin")
.password("password")
.roles("ADMIN","USER");
}
configure (HttpSecurity) permite la configuración de la seguridad basada en web a nivel de recursos, en función de una coincidencia de selección, por ejemplo, el ejemplo siguiente restringe las URL que comienzan con / admin / a los usuarios que tienen el rol ADMIN y declara que cualquier otra URL debe ser autenticado correctamente.
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/admin/**").hasRole("ADMIN")
.anyRequest().authenticated()
}
configure (WebSecurity) se utiliza para las opciones de configuración que afectan la seguridad global (ignorar recursos, establecer el modo de depuración, rechazar solicitudes mediante la implementación de una definición de firewall personalizada). Por ejemplo, el siguiente método haría que cualquier solicitud que comience con / resources / se ignore para fines de autenticación.
public void configure(WebSecurity web) throws Exception {
web
.ignoring()
.antMatchers("/resources/**");
}
Puede consultar el siguiente enlace para obtener más información Spring Security Java Config Preview: Web Security
El uso general del ignoring()
método WebSecurity omite Spring Security y ninguna de las funciones de Spring Security estará disponible. WebSecurity se basa por encima de 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 en el ejemplo anterior permite que Spring ignore /resources/**
y /publics/**
. Por lo tanto, .antMatchers("/publics/**").hasRole("USER")
no se considera en HttpSecurity .
Esto omitirá por completo el patrón de solicitud de la cadena de filtros de seguridad. Tenga en cuenta que cualquier cosa que coincida con esta ruta no tendrá servicios de autenticación o autorización aplicados y será de libre acceso.
configure(HttpSecurity)
permite la configuración de la seguridad basada en web a nivel de recursos , basándose en una coincidencia de selección, por ejemplo, el ejemplo siguiente restringe las URL que comienzan con /admin/
a los usuarios que tienen la función ADMIN y declara que cualquier otra URL debe autenticarse correctamente.
configure(WebSecurity)
se utiliza para las opciones de configuración que afectan la seguridad global (ignorar recursos, establecer el modo de depuración, rechazar solicitudes mediante la implementación de una definición de firewall personalizada). Por ejemplo, el siguiente método haría que /resources/
se ignorara cualquier solicitud que comience con para fines de autenticación .
AuthenticationManagerBuilder
extends AbstractConfiguredSecurityBuilder<AuthenticationManager,AuthenticationManagerBuilder>
implements ProviderManagerBuilder<AuthenticationManagerBuilder>
SecurityBuilder utilizado para crear un AuthenticationManager
. Permite crear fácilmente autenticación de memoria, autenticación LDAP, autenticación basada en JDBC, agregar UserDetailsService y agregar 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()
, tal vez se le cambió el nombre a hacehttp.authorizeRequests()
algún tiempo.