|  | @@ -0,0 +1,40 @@
 | 
	
		
			
				|  |  | +package net.sf.acegisecurity.providers.x509;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +import net.sf.acegisecurity.UserDetails;
 | 
	
		
			
				|  |  | +import net.sf.acegisecurity.AuthenticationException;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +import java.security.cert.X509Certificate;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * Populates the <code>UserDetails</code> associated with the X.509
 | 
	
		
			
				|  |  | + * certificate presented by a client.
 | 
	
		
			
				|  |  | + * <p>
 | 
	
		
			
				|  |  | + * Although the certificate will already have been validated by the web container,
 | 
	
		
			
				|  |  | + * implementations may choose to perform additional application-specific checks on
 | 
	
		
			
				|  |  | + * the certificate content here. If an implementation chooses to reject the certificate,
 | 
	
		
			
				|  |  | + * it should throw a {@link net.sf.acegisecurity.BadCredentialsException}.
 | 
	
		
			
				|  |  | + * </p>
 | 
	
		
			
				|  |  | + *
 | 
	
		
			
				|  |  | + * @author Luke
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +public interface X509AuthoritiesPopulator {
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * Obtains the granted authorities for the specified user.
 | 
	
		
			
				|  |  | +     *
 | 
	
		
			
				|  |  | +     * <p>
 | 
	
		
			
				|  |  | +     * May throw any <code>AuthenticationException</code> or return
 | 
	
		
			
				|  |  | +     * <code>null</code> if the authorities are unavailable.
 | 
	
		
			
				|  |  | +     * </p>
 | 
	
		
			
				|  |  | +     *
 | 
	
		
			
				|  |  | +     * @param userCertificate the X.509 certificate supplied
 | 
	
		
			
				|  |  | +     *
 | 
	
		
			
				|  |  | +     * @return the details of the indicated user (at minimum the granted
 | 
	
		
			
				|  |  | +     *         authorities and the username)
 | 
	
		
			
				|  |  | +     *
 | 
	
		
			
				|  |  | +     * @throws net.sf.acegisecurity.AuthenticationException if the user details are not available
 | 
	
		
			
				|  |  | +     *  or the certificate isn't valid for the application's purpose.
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    public UserDetails getUserDetails(X509Certificate userCertificate)
 | 
	
		
			
				|  |  | +        throws AuthenticationException;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +}
 |