Spring Security Framework

org.springframework.security.context
Class HttpSessionContextIntegrationFilter

java.lang.Object
  extended by org.springframework.security.ui.SpringSecurityFilter
      extended by org.springframework.security.context.HttpSessionContextIntegrationFilter
All Implemented Interfaces:
Filter, InitializingBean, Ordered

public class HttpSessionContextIntegrationFilter
extends SpringSecurityFilter
implements InitializingBean

Populates the SecurityContextHolder with information obtained from the HttpSession.

The HttpSession will be queried to retrieve the SecurityContext that should be stored against the SecurityContextHolder for the duration of the web request. At the end of the web request, any updates made to the SecurityContextHolder will be persisted back to the HttpSession by this filter.

If a valid SecurityContext cannot be obtained from the HttpSession for whatever reason, a fresh SecurityContext will be created and used instead. The created object will be of the instance defined by the setContextClass(Class) method (which defaults to SecurityContextImpl.

No HttpSession will be created by this filter if one does not already exist. If at the end of the web request the HttpSession does not exist, a HttpSession will only be created if the current contents of the SecurityContextHolder are not Object.equals(java.lang.Object) to a new instance of setContextClass(Class). This avoids needless HttpSession creation, but automates the storage of changes made to the SecurityContextHolder. There is one exception to this rule, that is if the forceEagerSessionCreation property is true, in which case sessions will always be created irrespective of normal session-minimisation logic (the default is false, as this is resource intensive and not recommended).

This filter will only execute once per request, to resolve servlet container (specifically Weblogic) incompatibilities.

If for whatever reason no HttpSession should ever be created (eg this filter is only being used with Basic authentication or similar clients that will never present the same jsessionid etc), the setAllowSessionCreation(boolean) should be set to false. Only do this if you really need to conserve server memory and ensure all classes using the SecurityContextHolder are designed to have no persistence of the SecurityContext between web requests. Please note that if forceEagerSessionCreation is true, the allowSessionCreation must also be true (setting it to false will cause a startup time error).

This filter MUST be executed BEFORE any authentication processing mechanisms. Authentication processing mechanisms (eg BASIC, CAS processing filters etc) expect the SecurityContextHolder to contain a valid SecurityContext by the time they execute.

Version:
$Id$
Author:
Ben Alex, Patrick Burleson, Luke Taylor, Martin Algesten

Field Summary
static String SPRING_SECURITY_CONTEXT_KEY
           
 
Fields inherited from class org.springframework.security.ui.SpringSecurityFilter
logger
 
Fields inherited from interface org.springframework.core.Ordered
HIGHEST_PRECEDENCE, LOWEST_PRECEDENCE
 
Constructor Summary
HttpSessionContextIntegrationFilter()
           
 
Method Summary
 void afterPropertiesSet()
           
 void doFilterHttp(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
           
 SecurityContext generateNewContext()
           
protected  Class getContextClass()
           
 int getOrder()
           
 boolean isAllowSessionCreation()
           
 boolean isCloneFromHttpSession()
           
 boolean isForceEagerSessionCreation()
           
 void setAllowSessionCreation(boolean allowSessionCreation)
           
 void setCloneFromHttpSession(boolean cloneFromHttpSession)
           
 void setContextClass(Class secureContext)
           
 void setForceEagerSessionCreation(boolean forceEagerSessionCreation)
           
 
Methods inherited from class org.springframework.security.ui.SpringSecurityFilter
destroy, doFilter, init, toString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

SPRING_SECURITY_CONTEXT_KEY

public static final String SPRING_SECURITY_CONTEXT_KEY
See Also:
Constant Field Values
Constructor Detail

HttpSessionContextIntegrationFilter

public HttpSessionContextIntegrationFilter()
                                    throws ServletException
Throws:
ServletException
Method Detail

isCloneFromHttpSession

public boolean isCloneFromHttpSession()

setCloneFromHttpSession

public void setCloneFromHttpSession(boolean cloneFromHttpSession)

afterPropertiesSet

public void afterPropertiesSet()
                        throws Exception
Specified by:
afterPropertiesSet in interface InitializingBean
Throws:
Exception

doFilterHttp

public void doFilterHttp(HttpServletRequest request,
                         HttpServletResponse response,
                         FilterChain chain)
                  throws IOException,
                         ServletException
Specified by:
doFilterHttp in class SpringSecurityFilter
Throws:
IOException
ServletException

generateNewContext

public SecurityContext generateNewContext()
                                   throws ServletException
Throws:
ServletException

isAllowSessionCreation

public boolean isAllowSessionCreation()

setAllowSessionCreation

public void setAllowSessionCreation(boolean allowSessionCreation)

getContextClass

protected Class getContextClass()

setContextClass

public void setContextClass(Class secureContext)

isForceEagerSessionCreation

public boolean isForceEagerSessionCreation()

setForceEagerSessionCreation

public void setForceEagerSessionCreation(boolean forceEagerSessionCreation)

getOrder

public int getOrder()
Specified by:
getOrder in interface Ordered

Spring Security Framework

Copyright © 2004-2010 SpringSource, Inc. All Rights Reserved.