2012-07-05 16 views
5

Deseo registrar cada inicio de sesión en mi aplicación web. Pude acceder a los inicios de sesión que se llevan a cabo a través del UsernamePasswordAuthenticationFilter, pero no sé cómo registrar usuarios que inician sesión utilizando la funcionalidad recordar-me. He intentado anular elRegistro de inicios de sesión con Spring Security

createSuccessfulAuthentication(HttpServletRequest request, UserDetails user) 

de TokenBasedRememberMeServices, pero luego cierres de sesión se registran también, debido a que el recordar-me el servicio re-autentica al usuario.

Respuesta

5

Para iniciar sesión con cada inicio de sesión correcto, creo que la mejor manera es crear LoginSucessHandler y especificar authentication-success-handler para el inicio de sesión normal y remember-me. He hecho esto con el código y la configuración a continuación.

@Service 
public class LoginSucessHandler extends 
     SavedRequestAwareAuthenticationSuccessHandler { 

    @Override 
    public void onAuthenticationSuccess(HttpServletRequest request, 
      HttpServletResponse response, Authentication authentication) 
      throws ServletException, IOException { 
     User user = (User) authentication.getPrincipal(); 
      // record login success of user 
     super.onAuthenticationSuccess(request, response, authentication); 
    } 

} 

<http auto-config="true" use-expressions="true"> 
    <form-login login-page="/login" 
     authentication-failure-url="/login.hst?error=true" 
     **authentication-success-handler-ref="loginSucessHandler"** /> 
    <logout invalidate-session="true" logout-success-url="/home" 
     logout-url="/logout" /> 
    <remember-me key="jbcp" **authentication-success-handler-ref="loginSucessHandler"**/> 
    <session-management> 
    <concurrency-control max-sessions="1" /> 
</session-management> 
</http> 
0

Creo que en su caso ayudará a la solución cuando utilice su filtro personalizado, que interceptará cada solicitud a su aplicación. En este filtro, puede registrar el nombre de usuario para cada solicitud.

Here I described how to add your custom filter. Solo necesita cambiar la funcionalidad a lo que desea. Y no deje de poner su filtro después de la cadena de filtro de seguridad en web.xml.

4

La mejor forma de registrar el éxito y las fallas de autenticación es usar un Spring ApplicationListener.

Spring Security publica varios eventos para el éxito y el fracaso de la autenticación que puede escuchar. Los eventos también se publican cuando se deniega el acceso a un recurso.

Puede mirar LoggerListener como ejemplo. Comience agregando uno de esos a su contexto de aplicación y automáticamente registrará eventos de autenticación en el nivel de advertencia.

En cuanto a los inicios de sesión de Remember-me, si cierra la sesión y luego accede al sitio inmediatamente después, y se vuelve a autenticar con una cookie remember-me, técnicamente es lo mismo que cualquier otra autenticación remember-me, por lo que no mucho que puedes hacer al respecto

Sin embargo, si su URL de éxito de cierre de sesión pasa por el filtro recordar-me, y así es como se crea la nueva sesión (sin ninguna acción adicional del usuario), simplemente omítala del filtro de seguridad cadena.

Cuestiones relacionadas