类 DelegatingFilterProxy
- 所有已实现的接口:
cn.taketoday.beans.factory.Aware,cn.taketoday.beans.factory.BeanNameAware,cn.taketoday.beans.factory.DisposableBean,cn.taketoday.beans.factory.InitializingBean,cn.taketoday.context.EnvironmentAware,cn.taketoday.core.env.EnvironmentCapable,ServletContextAware,Filter
web.xml, specifying the name of the target bean in the Framework
application context.
web.xml will usually contain a DelegatingFilterProxy definition,
with the specified filter-name corresponding to a bean name in
Framework's root application context. All calls to the filter proxy will then
be delegated to that bean in the Framework context, which is required to implement
the standard Servlet Filter interface.
This approach is particularly useful for Filter implementation with complex setup needs, allowing to apply the full Framework bean definition machinery to Filter instances. Alternatively, consider standard Filter setup in combination with looking up service beans from the Framework root application context.
NOTE: The lifecycle methods defined by the Servlet Filter interface
will by default not be delegated to the target bean, relying on the
Framework application context to manage the lifecycle of that bean. Specifying
the "targetFilterLifecycle" filter init-param as "true" will enforce invocation
of the Filter.init and Filter.destroy lifecycle methods
on the target bean, letting the servlet container manage the filter lifecycle.
DelegatingFilterProxy has been updated to optionally
accept constructor parameters when using a Servlet container's instance-based filter
registration methods These constructors allow
for providing the delegate Filter bean directly, or providing the application context
and bean name to fetch, avoiding the need to look up the application context from the
ServletContext.
This class was originally inspired by Framework Security's FilterToBeanProxy
class, written by Ben Alex.
- 从以下版本开始:
- 4.0 2022/2/20 23:17
- 作者:
- Juergen Hoeller, Sam Brannen, Chris Beams, Harry Yang
- 另请参阅:
-
setTargetBeanName(java.lang.String)setTargetFilterLifecycle(boolean)Filter.doFilter(jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponse, jakarta.servlet.FilterChain)Filter.init(jakarta.servlet.FilterConfig)Filter.destroy()DelegatingFilterProxy(Filter)DelegatingFilterProxy(String)DelegatingFilterProxy(String, ApplicationContext)ServletContext.addFilter(String, Filter)
-
字段概要
字段修饰符和类型字段说明private cn.taketoday.context.ApplicationContextprivate Stringprivate Filterprivate final Objectprivate Stringprivate boolean从类继承的字段 cn.taketoday.web.servlet.filter.GenericFilterBean
logger -
构造器概要
构造器构造器说明Create a newDelegatingFilterProxy.DelegatingFilterProxy(Filter delegate) Create a newDelegatingFilterProxywith the givenFilterdelegate.DelegatingFilterProxy(String targetBeanName) Create a newDelegatingFilterProxythat will retrieve the named target bean from the FrameworkWebApplicationContextfound in theServletContext(either the 'root' application context or the context named bysetContextAttribute(java.lang.String)).DelegatingFilterProxy(String targetBeanName, cn.taketoday.context.ApplicationContext wac) Create a newDelegatingFilterProxythat will retrieve the named target bean from the given FrameworkWebApplicationContext. -
方法概要
修饰符和类型方法说明voiddestroy()Subclasses may override this to perform custom filter shutdown.protected voiddestroyDelegate(Filter delegate) Destroy the Filter delegate.voiddoFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) protected cn.taketoday.context.ApplicationContextReturn theWebApplicationContextpassed in at construction time, if available.Return the name of the ServletContext attribute which should be used to retrieve theWebApplicationContextfrom which to load the delegateFilterbean.protected StringReturn the name of the target bean in the Framework application context.protected FilterinitDelegate(cn.taketoday.context.ApplicationContext wac) Initialize the Filter delegate, defined as bean the given Framework application context.protected voidSubclasses may override this to perform custom initialization.protected voidinvokeDelegate(Filter delegate, ServletRequest request, ServletResponse response, FilterChain filterChain) Actually invoke the delegate Filter with the given request and response.protected booleanReturn whether to invoke theFilter.initandFilter.destroylifecycle methods on the target bean.voidsetContextAttribute(String contextAttribute) Set the name of the ServletContext attribute which should be used to retrieve theWebApplicationContextfrom which to load the delegateFilterbean.voidsetTargetBeanName(String targetBeanName) Set the name of the target bean in the Framework application context.voidsetTargetFilterLifecycle(boolean targetFilterLifecycle) Set whether to invoke theFilter.initandFilter.destroylifecycle methods on the target bean.从类继承的方法 cn.taketoday.web.servlet.filter.GenericFilterBean
addRequiredProperty, afterPropertiesSet, createEnvironment, getEnvironment, getFilterConfig, getFilterName, getServletContext, init, initBeanWrapper, setBeanName, setEnvironment, setServletContext
-
字段详细资料
-
contextAttribute
-
applicationContext
@Nullable private cn.taketoday.context.ApplicationContext applicationContext -
targetBeanName
-
targetFilterLifecycle
private boolean targetFilterLifecycle -
delegate
-
delegateMonitor
-
-
构造器详细资料
-
DelegatingFilterProxy
public DelegatingFilterProxy()Create a newDelegatingFilterProxy. For traditional use inweb.xml. -
DelegatingFilterProxy
Create a newDelegatingFilterProxywith the givenFilterdelegate. Bypasses entirely the need for interacting with a Framework application context, specifying the target bean name, etc.For use with instance-based registration of filters.
- 参数:
delegate- theFilterinstance that this proxy will delegate to and manage the lifecycle for (must not benull).- 另请参阅:
-
DelegatingFilterProxy
Create a newDelegatingFilterProxythat will retrieve the named target bean from the FrameworkWebApplicationContextfound in theServletContext(either the 'root' application context or the context named bysetContextAttribute(java.lang.String)).For use with instance-based registration of filters.
The target bean must implement the standard Servlet Filter interface.
- 参数:
targetBeanName- name of the target filter bean to look up in the Framework application context (must not benull).- 另请参阅:
-
DelegatingFilterProxy
public DelegatingFilterProxy(String targetBeanName, @Nullable cn.taketoday.context.ApplicationContext wac) Create a newDelegatingFilterProxythat will retrieve the named target bean from the given FrameworkWebApplicationContext.For use with instance-based registration of filters.
The target bean must implement the standard Servlet Filter interface.
The given
WebApplicationContextmay or may not be refreshed when passed in. If it has not, and if the context implementsConfigurableApplicationContext, arefresh()will be attempted before retrieving the named target bean.This proxy's
Environmentwill be inherited from the givenWebApplicationContext.- 参数:
targetBeanName- name of the target filter bean in the Framework application context (must not benull).wac- the application context from which the target filter will be retrieved; ifnull, an application context will be looked up fromServletContextas a fallback.- 另请参阅:
-
-
方法详细资料
-
setContextAttribute
Set the name of the ServletContext attribute which should be used to retrieve theWebApplicationContextfrom which to load the delegateFilterbean. -
getContextAttribute
Return the name of the ServletContext attribute which should be used to retrieve theWebApplicationContextfrom which to load the delegateFilterbean. -
setTargetBeanName
Set the name of the target bean in the Framework application context. The target bean must implement the standard Servlet Filter interface.By default, the
filter-nameas specified for the DelegatingFilterProxy inweb.xmlwill be used. -
getTargetBeanName
Return the name of the target bean in the Framework application context. -
setTargetFilterLifecycle
public void setTargetFilterLifecycle(boolean targetFilterLifecycle) Set whether to invoke theFilter.initandFilter.destroylifecycle methods on the target bean.Default is "false"; target beans usually rely on the Framework application context for managing their lifecycle. Setting this flag to "true" means that the servlet container will control the lifecycle of the target Filter, with this proxy delegating the corresponding calls.
-
isTargetFilterLifecycle
protected boolean isTargetFilterLifecycle()Return whether to invoke theFilter.initandFilter.destroylifecycle methods on the target bean. -
initFilterBean
从类复制的说明:GenericFilterBeanSubclasses may override this to perform custom initialization. All bean properties of this filter will have been set before this method is invoked.Note: This method will be called from standard filter initialization as well as filter bean initialization in a Framework application context. Filter name and ServletContext will be available in both cases.
This default implementation is empty.
- 覆盖:
initFilterBean在类中GenericFilterBean- 抛出:
ServletException- if subclass initialization fails- 另请参阅:
-
doFilter
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws ServletException, IOException -
destroy
public void destroy()从类复制的说明:GenericFilterBeanSubclasses may override this to perform custom filter shutdown.Note: This method will be called from standard filter destruction as well as filter bean destruction in a Framework application context.
This default implementation is empty.
- 指定者:
destroy在接口中cn.taketoday.beans.factory.DisposableBean- 指定者:
destroy在接口中Filter- 覆盖:
destroy在类中GenericFilterBean
-
findApplicationContext
@Nullable protected cn.taketoday.context.ApplicationContext findApplicationContext()Return theWebApplicationContextpassed in at construction time, if available. Otherwise, attempt to retrieve aWebApplicationContextfrom theServletContextattribute with the configured name if set. Otherwise look up aWebApplicationContextunder the well-known "root" application context attribute. TheWebApplicationContextmust have already been loaded and stored in theServletContextbefore this filter gets initialized (or invoked).Subclasses may override this method to provide a different
WebApplicationContextretrieval strategy.- 返回:
- the
WebApplicationContextfor this proxy, ornullif not found - 另请参阅:
-
initDelegate
Initialize the Filter delegate, defined as bean the given Framework application context.The default implementation fetches the bean from the application context and calls the standard
Filter.initmethod on it, passing in the FilterConfig of this Filter proxy.- 参数:
wac- the root application context- 返回:
- the initialized delegate Filter
- 抛出:
ServletException- if thrown by the Filter- 另请参阅:
-
invokeDelegate
protected void invokeDelegate(Filter delegate, ServletRequest request, ServletResponse response, FilterChain filterChain) throws ServletException, IOException Actually invoke the delegate Filter with the given request and response.- 参数:
delegate- the delegate Filterrequest- the current HTTP requestresponse- the current HTTP responsefilterChain- the current FilterChain- 抛出:
ServletException- if thrown by the FilterIOException- if thrown by the Filter
-
destroyDelegate
Destroy the Filter delegate. Default implementation simply callsFilter.destroyon it.- 参数:
delegate- the Filter delegate (nevernull)- 另请参阅:
-