[ 
https://issues.apache.org/jira/browse/CLK-598?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Malcolm Edgar updated CLK-598:
------------------------------

    Description: 
Provide an application page interceptor /  listener facility into Click.  The 
concept is to provide an extension point for code which can listener to key 
page events and also interrupt normal page processing flow.

Using this code which tends to be incorporated into Page superclasses can be 
refactored into listener classes which can be reused in applications. This 
approach supports Page design by composition, rather than through inheritance.

Page listeners could be used for:
* enforcing an application wide security polity, rather than using the 
Page#onSecurityCheck() method
* dependency injection, see CLK-581
* support page performance profiling and logging

The listener interface would be:

public interface PageInterceptor {

       boolean pageCreate(Class<? extends Page> pageClass, Context context);

       boolean postCreate(Page page);

       boolean preResponse(Page page);

       void postDestroy(Page page);

}
 
Application page interceptor  classes would be defined in the click.xml 
configuration file. Applications could defined multiple interceptor which would 
be executed sequentially in the order in which there are defined.  Lnterceptor 
could have a scope /  lifecycle of request (where by new instances are created 
for each page request, and are threadsafe), or application (where by a single 
instance is created and used for all page requests).  interceptor can also be 
configured to have properties which are set after creation.  This scope rules 
equates to Spring prototype and singleton scopes.

An example configuration is provided below:

    <page-interceptor classname="com.mycorp.listener.ProfilingInterceptor"/>

    <page-interceptor classname="com.mycorp.listener.SecurityInterceptor" 
scope="application">
        <property name="notAthenticatedPath" value="/login.htm"/>
        <property name="notAuthorizedPath" value="/not-authorized.htm"/>
    </page-interceptor >

   


  was:
Provide an application page interceptor /  listener facility into Click.  The 
concept is to provide an extension point for code which can listener to key 
page events and also interrupt normal page processing flow.

Using this code which tends to be incorporated into Page superclasses can be 
refactored into listener classes which can be reused in applications. This 
approach supports Page design by composition, rather than through inheritance.

Page listeners could be used for:
* enforcing an application wide security polity, rather than using the 
Page#onSecurityCheck() method
* dependency injection, see CLK-581
* support page performance profiling and logging

The listener interface would be:

public interface PageInterceptor {

       boolean pageCreate(Class<? extends Page> pageClass, Context context);

       boolean postCreate(Page page);

       boolean preResponse(Page page);

       void postDestroy(Page page);

}
 
Application page interceptor  classes would be defined in the click.xml 
configuration file. Applications could defined multiple interceptor which would 
be executed sequentially in the order in which there are defined.  Lnterceptor 
could have a scope /  lifecycle of request (where by new instances are created 
for each page request, and are threadsafe), or application (where by a single 
instance is created and used for all page requests).  interceptor can also be 
configured to have properties which are set after creation.  This scope rules 
equates to Spring prototype and singleton scopes.

An example configuration is provided below:

    <page-interceptor classname="com.mycorp.listener.ProfilerInterceptor"/>

    <page-interceptor classname="com.mycorp.listener.SecurityInterceptor" 
scope="application">
        <property name="notAthenticatedPath" value="/login.htm"/>
        <property name="notAuthorizedPath" value="/not-authorized.htm"/>
    </page-interceptor >

   



> Add Page Interceptor facility
> -----------------------------
>
>                 Key: CLK-598
>                 URL: https://issues.apache.org/jira/browse/CLK-598
>             Project: Click
>          Issue Type: New Feature
>          Components: core
>            Reporter: Malcolm Edgar
>             Fix For: 2.2.0
>
>
> Provide an application page interceptor /  listener facility into Click.  The 
> concept is to provide an extension point for code which can listener to key 
> page events and also interrupt normal page processing flow.
> Using this code which tends to be incorporated into Page superclasses can be 
> refactored into listener classes which can be reused in applications. This 
> approach supports Page design by composition, rather than through inheritance.
> Page listeners could be used for:
> * enforcing an application wide security polity, rather than using the 
> Page#onSecurityCheck() method
> * dependency injection, see CLK-581
> * support page performance profiling and logging
> The listener interface would be:
> public interface PageInterceptor {
>        boolean pageCreate(Class<? extends Page> pageClass, Context context);
>        boolean postCreate(Page page);
>        boolean preResponse(Page page);
>        void postDestroy(Page page);
> }
>  
> Application page interceptor  classes would be defined in the click.xml 
> configuration file. Applications could defined multiple interceptor which 
> would be executed sequentially in the order in which there are defined.  
> Lnterceptor could have a scope /  lifecycle of request (where by new 
> instances are created for each page request, and are threadsafe), or 
> application (where by a single instance is created and used for all page 
> requests).  interceptor can also be configured to have properties which are 
> set after creation.  This scope rules equates to Spring prototype and 
> singleton scopes.
> An example configuration is provided below:
>     <page-interceptor classname="com.mycorp.listener.ProfilingInterceptor"/>
>     <page-interceptor classname="com.mycorp.listener.SecurityInterceptor" 
> scope="application">
>         <property name="notAthenticatedPath" value="/login.htm"/>
>         <property name="notAuthorizedPath" value="/not-authorized.htm"/>
>     </page-interceptor >
>    

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to