[ https://issues.apache.org/jira/browse/LABS-240?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14031882#comment-14031882 ]
jan iversen commented on LABS-240: ---------------------------------- Is this still an issue, if not please close it (or let me close it) > [web] Provide before and after handlers > --------------------------------------- > > Key: LABS-240 > URL: https://issues.apache.org/jira/browse/LABS-240 > Project: Labs > Issue Type: New Feature > Components: Magma > Affects Versions: Current > Reporter: Simone Gianni > Assignee: Simone Gianni > Fix For: Future > > > In a number of situation a WebHandler may want to perform some actions before > any call to a do or handle method. While this is achievable with aspects, > aspect method patterns knowledge is not require for the role of web > programmer, so a simpler method should be provided. > A good way could be to use an already existing "standard", for example using > @Before and @After annotations similar to those provided by Junit 4 or even > predefined names like setup and tearDown like it was in Junit 3 and how it is > in the startup package. > A good use case is, for example, when a certain value could be passed via > different environment methods. For example, a user preference which could be > present as a cookie or as a session parameter, giving precedence to one of > them, for example to cookies. In that case, every doMethod who wants to use > that user preference will end up checking if one of the two has been passed, > and using the most appropiate one. This could be done in a setup method, as > if it was an aspect. > Also, there are actions that need to be done before or after every request, > or every request in a certain zone of the site. > A good use case for this is the automatic user login. A login handler could > use cookies to mark a user, and then automatically log in when he comes back > to the site. Anyway, this should be done before any processing of the site is > done, cause having or not having a user could change the behaviour of a > number of site elements (like, display or not a login box, or a messages box > and so on). > For this situation, adding setup methods to the RootWebHandler will mean > "call me every request". Nesting the setup method in another handler will > limit the scope. > Using setup/teardown methods could bring a number of problems : > - Performances : for the automatic login system, we need many data passed to > the handler, for example sessionUser, cookieUser and the like. We don't need > to pass the cookies if the user is already logged in for example, or even if > a session is already present (we need to check only the first request that > arrives). In more complicated situations ths could be a huge performance > impact. > - Conflicts : anyone wanting to do something before every request will create > a setup method in the RootWebHandler, and if they need environment > informations (like sessionUser) they will try to add the setter. This can > easily lead to conflicts. > Also there are some limitations, for example the user may expect to be able > to do something in the setup method, like redirecting to a login page, or > displaying an error page telling something as a result of parameters > evaluation. > While we don't want to provide something with all the features of an aspect > (using which all this stuff is already possible), it could help to have the > setup method return an HtmlProducer. If it return null, nothing happens, if > it returns something, that something is returned instead of the doMethod that > was originally being called. > This solution can also help mitigate the performance problem. Infact an > "AutomaticLoginHandler" could handle all the automatic login stuff in it's > doCheckForLogin method, environmental getters and setters would be placed > only in that handler. That do would return null by default, since there is no > need to do anything if the user cannot be automatically logged in. In the > rootWebHandler only a setup method calling that do method if no session user > is present is needed, avoiding the binding of all cookies if not necessary. -- This message was sent by Atlassian JIRA (v6.2#6252) --------------------------------------------------------------------- To unsubscribe, e-mail: labs-unsubscr...@labs.apache.org For additional commands, e-mail: labs-h...@labs.apache.org