package edu.ualberta.med.biobank.server.security; import gov.nih.nci.security.authentication.LockoutManager; import gov.nih.nci.system.security.acegi.authentication.CSMAuthenticationProvider; import java.text.MessageFormat; import org.acegisecurity.AuthenticationException; import org.acegisecurity.BadCredentialsException; import org.acegisecurity.providers.UsernamePasswordAuthenticationToken; import org.acegisecurity.userdetails.UserDetails; /** * Don't really need to translate this text since this message will only be * displayed in stacktraces. */ public class BiobankAuthenticationProvider extends CSMAuthenticationProvider { @Override protected void additionalAuthenticationChecks(UserDetails userDetails, UsernamePasswordAuthenticationToken authentication) throws AuthenticationException { // Use CSM authenticationManager to authenticate User. try { super.additionalAuthenticationChecks(userDetails, authentication); } catch (BadCredentialsException e) { String user = userDetails.getUsername(); boolean lockout = LockoutManager.getInstance() .isUserLockedOut(user); if (lockout) { throw new BadCredentialsException( MessageFormat .format( "At least 3 failed connection attempts. Login for ''{0}'' disabled for 30 min.", //$NON-NLS-1$ user)); } throw e; } } }