Consider backporting it to 1.2 as well... :) /Mats
On 8/11/06, Stefan Arentz <[EMAIL PROTECTED]> wrote: > I'm running into a situation where the IAuthorizationStrategy > interface is not sufficient enough. What I would like to propose is to > change: > > boolean isInstantiationAuthorized(Class componentClass); > > to: > > boolean isInstantiationAuthorized(Class componentClass Object[] > arguments); > > This way an authorization strategy can capture the whole page request > and eventually redirect the user back to the original page that was > requested. > > A little example will probably explain better. > > Say we have a secure page like this: > > public abstract MyAuthenticatedWebPage extends WebPage { > ... > } > > public class EditProfilePage extends MyAuthenticatedWebPage { > EditProfilePage() { > ... > } > } > > Intercepting this page with a IAuthorizationStrategy is simple: > > class MyAuthorizationStrategy implements IAuthorizationStrategy > { > public boolean isInstantiationAuthorized(Class componentClass) > { > if > (MyAuthenticatedWebPage.class.isAssignableFrom(componentClass)) { > // Remember the page that was requested > session = ... > session.setRequestedAuthenticatedPage(componentClass); > // Show the login form - which will redirect back to the > original page after login > throw new > RestartResponseAtInterceptPageException(LogInPage.class); > } > return true; > } > > public boolean isActionAuthorized(Component component, Action > action) > { > return true; > } > } > > Somewhere in the LogInPage we can get back to the original page like this: > > session = ... > Class responsePage = session.getRequestedAuthenticatedPage(); > if (responsePage == null) { > responsePage = SomeHomePage.class; > } else { > session.setRequestedAuthenticatedPage(null); > } > setResponsePage(responsePage); > > This is probably a pretty well known wicket pattern. > > The problem is, it stops working when the page you want to protect > needs constructor arguments. Which is not an uncommon situation. > > For example: > > public class ShowSomeStuffByCountryPage extends > MyAuthenticatedWebPage { > ShowSomeStuffByCountryPage(Country country) { > ... > } > } > > There is no way to protect this page using IAuthorizationStrategy > since the page arguments (Country) get lost. > > So, the proposed change will result in two improvements: > > * The IAuthorizationStrategy can make a decision based not on just > the Page's class but also on the arguments to that Page. This will > allow for some more interesting advanced authorization schemes. > > * In case the IAuthorizationStrategy does the 'redirect to login page > and back to original page' thing, it can remember the whole request - > no information is lost. > > If this sounds like a useful improvement then I would like to > implement this in the Wicket 2.0 tree this weekend. > > I've been wanting to contribute to Wicket for a long time and I think > this is a good start. > > If people here agree, what is a good way to do this? Shall I make a > patch and put that online so that the committers can look at it? How > does that process work for this project? > > :-) > > S. > > ------------------------------------------------------------------------- > Using Tomcat but need to do more? Need to support web services, security? > Get stuff done quickly with pre-integrated technology to make your job easier > Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo > http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 > _______________________________________________ > Wicket-develop mailing list > Wicket-develop@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/wicket-develop > ------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 _______________________________________________ Wicket-develop mailing list Wicket-develop@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wicket-develop