mirror of
				https://github.com/spring-projects/spring-security.git
				synced 2025-10-30 22:28:46 +00:00 
			
		
		
		
	Allow custom SecureContext implementations to be selected by user.
This commit is contained in:
		
							parent
							
								
									515b2161c9
								
							
						
					
					
						commit
						fe91639b15
					
				| @ -2,6 +2,7 @@ Changes in version 0.6 (2004-xx-xx) | ||||
| ----------------------------------- | ||||
| 
 | ||||
| * Added feature so DaoAuthenticationProvider returns User in Authentication | ||||
| * Added AbstractIntegrationFilter.secureContext property for custom contexts | ||||
| * Refactored User to UserDetails interface | ||||
| * Fixed Linux compatibility issues (directory case sensitivity etc) | ||||
| * Fixed AbstractProcessingFilter to handle servlet spec container differences | ||||
|  | ||||
| @ -24,6 +24,8 @@ import net.sf.acegisecurity.context.SecureContextImpl; | ||||
| import org.apache.commons.logging.Log; | ||||
| import org.apache.commons.logging.LogFactory; | ||||
| 
 | ||||
| import org.springframework.beans.factory.InitializingBean; | ||||
| 
 | ||||
| import java.io.IOException; | ||||
| 
 | ||||
| import javax.servlet.Filter; | ||||
| @ -59,17 +61,44 @@ import javax.servlet.ServletResponse; | ||||
|  * be obtained from the well-known location. It will simply continue the | ||||
|  * filter chain as normal. | ||||
|  * </p> | ||||
|  *  | ||||
|  * <p> | ||||
|  * If the <code>ContextHolder</code> does not contain a valid {@link | ||||
|  * SecureContext}, one will be created. The created object will be of the | ||||
|  * instance defined by the {@link #setSecureContext(Class)} method. | ||||
|  * </p> | ||||
|  * | ||||
|  * @author Ben Alex | ||||
|  * @version $Id$ | ||||
|  */ | ||||
| public abstract class AbstractIntegrationFilter implements Filter { | ||||
| public abstract class AbstractIntegrationFilter implements InitializingBean, | ||||
|     Filter { | ||||
|     //~ Static fields/initializers ============================================= | ||||
| 
 | ||||
|     protected static final Log logger = LogFactory.getLog(AbstractIntegrationFilter.class); | ||||
| 
 | ||||
|     //~ Instance fields ======================================================== | ||||
| 
 | ||||
|     private Class secureContext = SecureContextImpl.class; | ||||
| 
 | ||||
|     //~ Methods ================================================================ | ||||
| 
 | ||||
|     public void setSecureContext(Class secureContext) { | ||||
|         this.secureContext = secureContext; | ||||
|     } | ||||
| 
 | ||||
|     public Class getSecureContext() { | ||||
|         return secureContext; | ||||
|     } | ||||
| 
 | ||||
|     public void afterPropertiesSet() throws Exception { | ||||
|         if ((this.secureContext == null) | ||||
|             || (!this.secureContext.isAssignableFrom(SecureContext.class))) { | ||||
|             throw new IllegalArgumentException( | ||||
|                 "secureContext must be defined and implement SecureContext"); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Writes a new <code>Authentication</code> object to the container's | ||||
|      * well-known location, if supported the subclass. | ||||
| @ -97,18 +126,24 @@ public abstract class AbstractIntegrationFilter implements Filter { | ||||
|             Authentication auth = (Authentication) extracted; | ||||
| 
 | ||||
|             // Get or create existing SecureContext | ||||
|             SecureContext secureContext = null; | ||||
|             SecureContext sc = null; | ||||
| 
 | ||||
|             if ((ContextHolder.getContext() == null) | ||||
|                 || !(ContextHolder.getContext() instanceof SecureContext)) { | ||||
|                 secureContext = new SecureContextImpl(); | ||||
|                 try { | ||||
|                     sc = (SecureContext) this.secureContext.newInstance(); | ||||
|                 } catch (InstantiationException ie) { | ||||
|                     throw new ServletException(ie); | ||||
|                 } catch (IllegalAccessException iae) { | ||||
|                     throw new ServletException(iae); | ||||
|                 } | ||||
|             } else { | ||||
|                 secureContext = (SecureContext) ContextHolder.getContext(); | ||||
|                 sc = (SecureContext) ContextHolder.getContext(); | ||||
|             } | ||||
| 
 | ||||
|             // Add Authentication to SecureContext, and save | ||||
|             secureContext.setAuthentication(auth); | ||||
|             ContextHolder.setContext((Context) secureContext); | ||||
|             sc.setAuthentication(auth); | ||||
|             ContextHolder.setContext((Context) sc); | ||||
|         } else { | ||||
|             if (logger.isDebugEnabled()) { | ||||
|                 logger.debug( | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user