Saltar al contenido

Spring Security 3 http-basic authentication-success-handler

Solución:

No puede configurar un controlador de éxito de autenticación para la autenticación BÁSICA. Sin embargo, puede extender BasicAuthenticationFilter y anular el método onSuccessfulAuthentication:

@Component("customBasicAuthFilter")
public class CustomBasicAuthFilter extends BasicAuthenticationFilter {

    @Autowired
    public CustomBasicAuthFilter(AuthenticationManager authenticationManager) {
        super(authenticationManager);
    }

    protected void onSuccessfulAuthentication(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, Authentication authResult) {
        // Do what you want here
    }
}

Inyectelo en su configuración de seguridad con algo como:

<http entry-point-ref="basicEntryPoint">
  <custom-filter ref="customBasicAuthFilter" position="BASIC_AUTH_FILTER"/>
</http>
<authentication-manager alias="authenticationManager">
  ...
</authentication-manager>

Actualizar: O con la configuración de Java en lugar de XML:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
      .addFilterAt(customBasicAuthFilter, BasicAuthenticationFilter.class)
      .exceptionHandling().authenticationEntryPoint(basicEntryPoint);
}

Como solución alternativa, puede utilizar http-básico en conjunción con formulario de inicio de sesión:

<http auto-config="true">
    ...
    <http-basic  />
    <form-login authentication-success-handler-ref="authenticationSuccessHandler" ... />
    ...
</http>

BasicAuthenticationFilter funcionará.

EDITAR.
Si desea configurar su versión anulada de BasicAuthenticationFilter, creo que necesita:

  1. Agréguelo a la cadena de filtros en la posición BASIC_AUTH_FILTER como se explica aquí
  2. Configure el punto de entrada BasicAuthenticationEntryPoint correspondiente a través de entrada-punto-ref atributo de http etiqueta.

En lugar de usar un AuthenticationSuccessHandler puede confiar en el mecanismo de eventos de Spring Security y escuchar AuthenticationSuccessEvent mediante el uso de la interfaz ApplicationListener:

@Component
public class AuthenticationEventListener implements
    ApplicationListener<AuthenticationSuccessEvent>
{

    @Override
    public void onApplicationEvent (AuthenticationSuccessEvent event) {
       // do what you want here
       // example: persist event to the database
    }
}

Consulte también esta respuesta aquí: https://stackoverflow.com/a/11384001/474034

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *