| 
					
				 | 
			
			
				@@ -0,0 +1,101 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/* Copyright 2004 Acegi Technology Pty Limited 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Licensed under the Apache License, Version 2.0 (the "License"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * you may not use this file except in compliance with the License. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * You may obtain a copy of the License at 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ *     http://www.apache.org/licenses/LICENSE-2.0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Unless required by applicable law or agreed to in writing, software 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * distributed under the License is distributed on an "AS IS" BASIS, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * See the License for the specific language governing permissions and 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * limitations under the License. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+package org.acegisecurity.adapters.cas3; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.acegisecurity.Authentication; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.acegisecurity.AuthenticationManager; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.acegisecurity.providers.UsernamePasswordAuthenticationToken; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.apache.commons.logging.Log; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.apache.commons.logging.LogFactory; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.jasig.cas.authentication.handler.AuthenticationException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.jasig.cas.authentication.handler.AuthenticationHandler; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.jasig.cas.authentication.handler.support.AbstractUsernamePasswordAuthenticationHandler; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.jasig.cas.authentication.principal.UsernamePasswordCredentials; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.util.Assert; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * <p> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Provides JA-SIG CAS 3 authentication by delegating to the Acegi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * <code>AuthenticationManager</code>. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * </p> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * <p> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * This class would be configured in the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * <code>webapp/WEB-INF/deployerConfigContext.xml</code> file in the CAS 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * distribution. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * </p> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ *  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @author Scott Battaglia 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @version $Id$ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ *  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @see AuthenticationHandler 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @see AuthenticationManager 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+public final class CasAuthenticationHandler extends 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		AbstractUsernamePasswordAuthenticationHandler { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	private Log log = LogFactory.getLog(this.getClass()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	private AuthenticationManager authenticationManager; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	protected boolean authenticateUsernamePasswordInternal( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			final UsernamePasswordCredentials credentials) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			throws AuthenticationException { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		final Authentication authenticationRequest = new UsernamePasswordAuthenticationToken( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				credentials.getUsername(), credentials.getPassword()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (log.isDebugEnabled()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			log.debug("Attempting to authenticate for user: " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					+ credentials.getUsername()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			this.authenticationManager.authenticate(authenticationRequest); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} catch (final org.acegisecurity.AuthenticationException e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if (log.isDebugEnabled()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				log 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						.debug("Authentication request for " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								+ credentials.getUsername() + "failed: " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								+ e.toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (log.isDebugEnabled()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			log.debug("Authentication request for " + credentials.getUsername() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					+ " successful."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	protected void afterPropertiesSetInternal() throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Assert.notNull(this.authenticationManager, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				"authenticationManager cannot be null."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 * Method to set the Acegi <code>AuthenticationManager</code> to delegate 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 * to. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 *  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 * @param authenticationManager 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 *            the Acegi AuthenticationManager that knows how to authenticate 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 *            users. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public void setAuthenticationManager( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			final AuthenticationManager authenticationManager) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		this.authenticationManager = authenticationManager; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 |