org.apache.shiro.web.servlet
Class AdviceFilter

java.lang.Object
  extended by org.apache.shiro.web.servlet.ServletContextSupport
      extended by org.apache.shiro.web.servlet.AbstractFilter
          extended by org.apache.shiro.web.servlet.NameableFilter
              extended by org.apache.shiro.web.servlet.OncePerRequestFilter
                  extended by org.apache.shiro.web.servlet.AdviceFilter
All Implemented Interfaces:
Filter, Nameable
Direct Known Subclasses:
LogoutFilter, PathMatchingFilter

public abstract class AdviceFilter
extends OncePerRequestFilter

A Servlet Filter that enables AOP-style "around" advice for a ServletRequest via preHandle, postHandle, and afterCompletion hooks.

Since:
0.9

Field Summary
 
Fields inherited from class org.apache.shiro.web.servlet.OncePerRequestFilter
ALREADY_FILTERED_SUFFIX
 
Fields inherited from class org.apache.shiro.web.servlet.AbstractFilter
filterConfig
 
Constructor Summary
AdviceFilter()
           
 
Method Summary
 void afterCompletion(ServletRequest request, ServletResponse response, Exception exception)
          Called in all cases in a finally block even if preHandle returns false or if an exception is thrown during filter chain processing.
protected  void cleanup(ServletRequest request, ServletResponse response, Exception existing)
          Executes cleanup logic in the finally code block in the doFilterInternal implementation.
 void doFilterInternal(ServletRequest request, ServletResponse response, FilterChain chain)
          Actually implements the chain execution logic, utilizing pre, post, and after advice hooks.
protected  void executeChain(ServletRequest request, ServletResponse response, FilterChain chain)
          Actually executes the specified filter chain by calling chain.doFilter(request,response);.
protected  void postHandle(ServletRequest request, ServletResponse response)
          Allows 'post' advice logic to be called, but only if no exception occurs during filter chain execution.
protected  boolean preHandle(ServletRequest request, ServletResponse response)
          Returns true if the filter chain should be allowed to continue, false otherwise.
 
Methods inherited from class org.apache.shiro.web.servlet.OncePerRequestFilter
doFilter, getAlreadyFilteredAttributeName, isEnabled, isEnabled, setEnabled, shouldNotFilter
 
Methods inherited from class org.apache.shiro.web.servlet.NameableFilter
getName, setName, toStringBuilder
 
Methods inherited from class org.apache.shiro.web.servlet.AbstractFilter
destroy, getFilterConfig, getInitParam, init, onFilterConfigSet, setFilterConfig
 
Methods inherited from class org.apache.shiro.web.servlet.ServletContextSupport
getContextAttribute, getContextInitParam, getServletContext, removeContextAttribute, setContextAttribute, setServletContext, toString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

AdviceFilter

public AdviceFilter()
Method Detail

preHandle

protected boolean preHandle(ServletRequest request,
                            ServletResponse response)
                     throws Exception
Returns true if the filter chain should be allowed to continue, false otherwise. It is called before the chain is actually consulted/executed.

The default implementation returns true always and exists as a template method for subclasses.

Parameters:
request - the incoming ServletRequest
response - the outgoing ServletResponse
Returns:
true if the filter chain should be allowed to continue, false otherwise.
Throws:
Exception - if there is any error.

postHandle

protected void postHandle(ServletRequest request,
                          ServletResponse response)
                   throws Exception
Allows 'post' advice logic to be called, but only if no exception occurs during filter chain execution. That is, if executeChain throws an exception, this method will never be called. Be aware of this when implementing logic. Most resource 'cleanup' behavior is often done in the afterCompletion(request,response,exception) implementation, which is guaranteed to be called for every request, even when the chain processing throws an Exception.

The default implementation does nothing (no-op) and exists as a template method for subclasses.

Parameters:
request - the incoming ServletRequest
response - the outgoing ServletResponse
Throws:
Exception - if an error occurs.

afterCompletion

public void afterCompletion(ServletRequest request,
                            ServletResponse response,
                            Exception exception)
                     throws Exception
Called in all cases in a finally block even if preHandle returns false or if an exception is thrown during filter chain processing. Can be used for resource cleanup if so desired.

The default implementation does nothing (no-op) and exists as a template method for subclasses.

Parameters:
request - the incoming ServletRequest
response - the outgoing ServletResponse
exception - any exception thrown during preHandle, executeChain, or postHandle execution, or null if no exception was thrown (i.e. the chain processed successfully).
Throws:
Exception - if an error occurs.

executeChain

protected void executeChain(ServletRequest request,
                            ServletResponse response,
                            FilterChain chain)
                     throws Exception
Actually executes the specified filter chain by calling chain.doFilter(request,response);.

Can be overridden by subclasses for custom logic.

Parameters:
request - the incoming ServletRequest
response - the outgoing ServletResponse
chain - the filter chain to execute
Throws:
Exception - if there is any error executing the chain.

doFilterInternal

public void doFilterInternal(ServletRequest request,
                             ServletResponse response,
                             FilterChain chain)
                      throws ServletException,
                             IOException
Actually implements the chain execution logic, utilizing pre, post, and after advice hooks.

Specified by:
doFilterInternal in class OncePerRequestFilter
Parameters:
request - the incoming ServletRequest
response - the outgoing ServletResponse
chain - the filter chain to execute
Throws:
ServletException - if a servlet-related error occurs
IOException - if an IO error occurs

cleanup

protected void cleanup(ServletRequest request,
                       ServletResponse response,
                       Exception existing)
                throws ServletException,
                       IOException
Executes cleanup logic in the finally code block in the doFilterInternal implementation.

This implementation specifically calls afterCompletion as well as handles any exceptions properly.

Parameters:
request - the incoming ServletRequest
response - the outgoing ServletResponse
existing - any exception that might have occurred while executing the FilterChain or pre or post advice, or null if the pre/chain/post execution did not throw an Exception.
Throws:
ServletException - if any exception other than an IOException is thrown.
IOException - if the pre/chain/post execution throw an IOException


Copyright © 2004-2014 The Apache Software Foundation. All Rights Reserved.