public interface HandlerInterceptor
A HandlerInterceptor
gets called before the appropriate HandlerAdapter
triggers the execution of
the handler itself. This mechanism can be used for a large field of preprocessing aspects, e.g. for authorization
checks, or common handler behavior like locale or theme changes. Its main purpose is to permit the factoring out of
otherwise repetitive handler code.
Typically an interceptor chain is defined per HandlerMapping
bean, sharing its granularity. To be able to
apply a certain interceptor chain to a group of handlers, one needs to map the desired handlers via one HandlerMapping
bean. The interceptors themselves are defined as beans in the application context, referenced by the
mapping bean definition via its "interceptors"
property (in XML: a <list> of <ref> elements).
A HandlerInterceptor
is basically similar to a Servlet Filter
, but in contrast to
the latter it allows custom pre-processing with the option to prohibit the execution of the handler itself, and
custom post-processing. Filters
are more powerful; for example they allow for exchanging the request and
response objects that are handed down the chain. Note that a filter gets configured in web.xml
, a HandlerInterceptor
in the application context.
As a basic guideline, fine-grained handler-related pre-processing tasks are candidates for HandlerInterceptor
implementations, especially factored-out common handler code and authorization checks. On the
other hand, a Filter
is well-suited for request content and view content handling, like multipart forms and
GZIP compression. This typically shows when one needs to map the filter to certain content types (e.g. images), or to
all requests.
Be aware that filters cannot be applied to portlet requests (they only operate on servlet requests), so for portlet requests interceptors are essential.
If we assume a "sunny day" request cycle (i.e. a request where nothing goes wrong and all is well), the workflow
of a HandlerInterceptor
will be as follows:
Action Request:
DispatcherPortlet
maps the action request to a particular handler and assembles a handler execution
chain consisting of the handler that is to be invoked and all of the HandlerInterceptor
instances that
apply to the request.preHandleAction(..)
is called; if the invocation of this method returns true
then this workflow
continues.HandlerAdapter.handleAction(..)
).afterActionCompletion(..)
is called.Render Request:
DispatcherPortlet
maps the render request to a particular handler and assembles a handler execution
chain consisting of the handler that is to be invoked and all of the HandlerInterceptor
instances that
apply to the request.preHandleRender(..)
is called; if the invocation of this method returns true
then this workflow
continues.HandlerAdapter.handleRender(..)
).postHandleRender(..)
is called.HandlerAdapter
returned a ModelAndView
, then DispatcherPortlet
renders the view
accordingly.afterRenderCompletion(..)
is called.HandlerExecutionChain.getInterceptors()
,
HandlerMapping
,
AbstractHandlerMapping.setInterceptors(java.lang.Object[])
,
HandlerExecutionChain
Modifier and Type | Method and Description |
---|---|
void |
afterActionCompletion(javax.portlet.ActionRequest request,
javax.portlet.ActionResponse response,
Object handler,
Exception ex)
Callback after completion of request processing in the action phase, that is, after rendering the view.
|
void |
afterEventCompletion(javax.portlet.EventRequest request,
javax.portlet.EventResponse response,
Object handler,
Exception ex)
Callback after completion of request processing in the action phase, that is, after rendering the view.
|
void |
afterRenderCompletion(javax.portlet.RenderRequest request,
javax.portlet.RenderResponse response,
Object handler,
Exception ex)
Callback after completion of request processing, that is, after rendering the view.
|
void |
afterResourceCompletion(javax.portlet.ResourceRequest request,
javax.portlet.ResourceResponse response,
Object handler,
Exception ex)
Callback after completion of request processing, that is, after rendering the view.
|
void |
postHandleRender(javax.portlet.RenderRequest request,
javax.portlet.RenderResponse response,
Object handler,
ModelAndView modelAndView)
Intercept the execution of a handler in the render phase.
|
void |
postHandleResource(javax.portlet.ResourceRequest request,
javax.portlet.ResourceResponse response,
Object handler,
ModelAndView modelAndView)
Intercept the execution of a handler in the render phase.
|
boolean |
preHandleAction(javax.portlet.ActionRequest request,
javax.portlet.ActionResponse response,
Object handler)
Intercept the execution of a handler in the action phase.
|
boolean |
preHandleEvent(javax.portlet.EventRequest request,
javax.portlet.EventResponse response,
Object handler)
Intercept the execution of a handler in the action phase.
|
boolean |
preHandleRender(javax.portlet.RenderRequest request,
javax.portlet.RenderResponse response,
Object handler)
Intercept the execution of a handler in the render phase.
|
boolean |
preHandleResource(javax.portlet.ResourceRequest request,
javax.portlet.ResourceResponse response,
Object handler)
Intercept the execution of a handler in the render phase.
|
void afterActionCompletion(javax.portlet.ActionRequest request, javax.portlet.ActionResponse response, Object handler, Exception ex) throws Exception
Note: Will only be called if this interceptor's preHandleAction(javax.portlet.ActionRequest,
javax.portlet.ActionResponse, Object)
method has successfully completed and returned true
!
request
- current portlet action requestresponse
- current portlet action responsehandler
- chosen handler to execute, for type and/or instance examinationex
- exception thrown on handler execution, if any (only included as additional context information
for the case where a handler threw an exception; request execution may have failed even when
this argument is null
)Exception
- in case of errorsvoid afterEventCompletion(javax.portlet.EventRequest request, javax.portlet.EventResponse response, Object handler, Exception ex) throws Exception
Note: Will only be called if this interceptor's preHandleAction(javax.portlet.ActionRequest,
javax.portlet.ActionResponse, Object)
method has successfully completed and returned true
!
request
- current portlet action requestresponse
- current portlet action responsehandler
- chosen handler to execute, for type and/or instance examinationex
- exception thrown on handler execution, if any (only included as additional context information
for the case where a handler threw an exception; request execution may have failed even when
this argument is null
)Exception
- in case of errorsvoid afterRenderCompletion(javax.portlet.RenderRequest request, javax.portlet.RenderResponse response, Object handler, Exception ex) throws Exception
Note: Will only be called if this interceptor's preHandleRender(javax.portlet.RenderRequest,
javax.portlet.RenderResponse, Object)
method has successfully completed and returned true
!
request
- current portlet render requestresponse
- current portlet render responsehandler
- chosen handler to execute, for type and/or instance examinationex
- exception thrown on handler execution, if anyException
- in case of errorsvoid afterResourceCompletion(javax.portlet.ResourceRequest request, javax.portlet.ResourceResponse response, Object handler, Exception ex) throws Exception
Note: Will only be called if this interceptor's preHandleRender(javax.portlet.RenderRequest,
javax.portlet.RenderResponse, Object)
method has successfully completed and returned true
!
request
- current portlet render requestresponse
- current portlet render responsehandler
- chosen handler to execute, for type and/or instance examinationex
- exception thrown on handler execution, if anyException
- in case of errorsvoid postHandleRender(javax.portlet.RenderRequest request, javax.portlet.RenderResponse response, Object handler, ModelAndView modelAndView) throws Exception
Called after a HandlerAdapter
actually invoked the handler, but before the DispatcherPortlet
renders the view. Can thus expose additional model objects to the view via the given ModelAndView
.
DispatcherPortlet
processes a handler in an execution chain, consisting of any number of interceptors,
with the handler itself at the end. With this method, each interceptor can post-process an execution, getting
applied in inverse order of the execution chain.
request
- current portlet render requestresponse
- current portlet render responsehandler
- chosen handler to execute, for type and/or instance examinationmodelAndView
- the ModelAndView
that the handler returned (can also be null
)Exception
- in case of errorsvoid postHandleResource(javax.portlet.ResourceRequest request, javax.portlet.ResourceResponse response, Object handler, ModelAndView modelAndView) throws Exception
Called after a HandlerAdapter
actually invoked the handler, but before the DispatcherPortlet
renders the view. Can thus expose additional model objects to the view via the given ModelAndView
.
DispatcherPortlet
processes a handler in an execution chain, consisting of any number of interceptors,
with the handler itself at the end. With this method, each interceptor can post-process an execution, getting
applied in inverse order of the execution chain.
request
- current portlet render requestresponse
- current portlet render responsehandler
- chosen handler to execute, for type and/or instance examinationmodelAndView
- the ModelAndView
that the handler returned (can also be null
)Exception
- in case of errorsboolean preHandleAction(javax.portlet.ActionRequest request, javax.portlet.ActionResponse response, Object handler) throws Exception
Called after a HandlerMapping determines an appropriate handler object to handle an ActionRequest
, but
before said HandlerAdapter actually invokes the handler.
DispatcherPortlet
processes a handler in an execution chain, consisting of any number of interceptors,
with the handler itself at the end. With this method, each interceptor can decide to abort the execution chain,
typically throwing an exception or writing a custom response.
request
- current portlet action requestresponse
- current portlet action responsehandler
- chosen handler to execute, for type and/or instance evaluationtrue
if the execution chain should proceed with the next interceptor or the handler itself.
Else, DispatcherPortlet
assumes that this interceptor has already dealt with the response itselfException
- in case of errorsboolean preHandleEvent(javax.portlet.EventRequest request, javax.portlet.EventResponse response, Object handler) throws Exception
Called after a HandlerMapping determines an appropriate handler object to handle an ActionRequest
, but
before said HandlerAdapter actually invokes the handler.
DispatcherPortlet
processes a handler in an execution chain, consisting of any number of interceptors,
with the handler itself at the end. With this method, each interceptor can decide to abort the execution chain,
typically throwing an exception or writing a custom response.
request
- current portlet action requestresponse
- current portlet action responsehandler
- chosen handler to execute, for type and/or instance evaluationtrue
if the execution chain should proceed with the next interceptor or the handler itself.
Else, DispatcherPortlet
assumes that this interceptor has already dealt with the response itselfException
- in case of errorsboolean preHandleRender(javax.portlet.RenderRequest request, javax.portlet.RenderResponse response, Object handler) throws Exception
Called after a HandlerMapping determines an appropriate handler object to handle a RenderRequest
, but
before said HandlerAdapter actually invokes the handler.
DispatcherPortlet
processes a handler in an execution chain, consisting of any number of interceptors,
with the handler itself at the end. With this method, each interceptor can decide to abort the execution chain,
typically throwing an exception or writing a custom response.
request
- current portlet render requestresponse
- current portlet render responsehandler
- chosen handler to execute, for type and/or instance evaluationtrue
if the execution chain should proceed with the next interceptor or the handler itself.
Else, DispatcherPortlet
assumes that this interceptor has already dealt with the response itselfException
- in case of errorsboolean preHandleResource(javax.portlet.ResourceRequest request, javax.portlet.ResourceResponse response, Object handler) throws Exception
Called after a HandlerMapping determines an appropriate handler object to handle a RenderRequest
, but
before said HandlerAdapter actually invokes the handler.
DispatcherPortlet
processes a handler in an execution chain, consisting of any number of interceptors,
with the handler itself at the end. With this method, each interceptor can decide to abort the execution chain,
typically throwing an exception or writing a custom response.
request
- current portlet render requestresponse
- current portlet render responsehandler
- chosen handler to execute, for type and/or instance evaluationtrue
if the execution chain should proceed with the next interceptor or the handler itself.
Else, DispatcherPortlet
assumes that this interceptor has already dealt with the response itselfException
- in case of errorsCopyright © 2019 Liferay, Inc.. All rights reserved.