You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@wicket.apache.org by Eyal Golan <eg...@gmail.com> on 2009/09/03 10:27:21 UTC

AbortWithWebErrorCodeException and RequestCycle newRequestCycle

Hello,
We have in our application the following code:
    /**
     * @see
org.apache.wicket.Application#newRequestCycle(org.apache.wicket.Request,
     *      org.apache.wicket.Response)
     */
    @Override
    public RequestCycle newRequestCycle(final Request request,
            final Response response) {
        return new WebRequestCycle(this, (WebRequest) request,
                (WebResponse) response) {

            @Override
            public Page onRuntimeException(Page page, RuntimeException e) {
                if (DEPLOYMENT.equalsIgnoreCase(getConfigurationType())) {
                    if
(PageExpiredException.class.isAssignableFrom(e.getClass())) {
                        return null;
                    } else {
                        e.printStackTrace();
                        System.out.println(e.getMessage());
                        return new InternalErrorPage(getErrorDisplay(e));
                    }
                } else {
                    // In development we want to see the exception
                    return null;
                }

            }
        };
    }

Also, in our base page we have this
    protected void verifyAccess(PageParameters pageParameters) {
        // Redirect to Login page on invalid access.
        if (!isUserLoggedIn()) {
            throw new RestartResponseAtInterceptPageException(Login.class);
        }
        else if (! isPageAllowed(pageParameters)) {
            String url = pageParameters.getString("url");
            if (url != null) {
                throw new
AbortWithWebErrorCodeException(HttpServletResponse.SC_FORBIDDEN, url);
            }
            else {
                throw new
AbortWithWebErrorCodeException(HttpServletResponse.SC_FORBIDDEN);
            }
        }
    }

'verifyAccess' is called in the construction of the page.

The problem I'm having is when the page is not allowed.
We throw AbortWithWebErrorCodeException.

The user gets a 403 error page.
As expected, the onRuntimeException that configured in the WebApp is not
reached.

I thought to create a RuntimeException that will be thrown instead of the
AbortWithWebErrorCodeException(...) and to analyze it in the
onRuntimeException.
But, is there a way to map the 403 error page to another page? A setting of
the Application or even in the web.xml?

Thanks,



Eyal Golan
egolan74@gmail.com

Visit: http://jvdrums.sourceforge.net/
LinkedIn: http://www.linkedin.com/in/egolan74

P  Save a tree. Please don't print this e-mail unless it's really necessary

Re: AbortWithWebErrorCodeException and RequestCycle newRequestCycle

Posted by Eyal Golan <eg...@gmail.com>.
Eyal Golan
egolan74@gmail.com

Visit: http://jvdrums.sourceforge.net/
LinkedIn: http://www.linkedin.com/in/egolan74

P  Save a tree. Please don't print this e-mail unless it's really necessary


On Thu, Sep 3, 2009 at 2:04 PM, Pedro Santos <pe...@gmail.com> wrote:

>
>
> don't you gona fall in to the same problem this way?
>
-- No. because if I throw a RuntimeException, then I will catch it in the
onRuntimeError.

>
> Set error page in web.xml
>   <?xml version="1.0" encoding="iso-8859-1"?>
> <!DOCTYPE web-app
> PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
> "http://java.sun.com/dtd/web-app_2_3.dtd">
> <web-app>
>
>
>    <error-page>
>        <error-code>
>            403
>        </error-code>
>        <location>
>            /403.*html*
>        </location>
>    </error-page>
>
> </web-app>
>
>
> --- Thanks. We'll try that. But is there a 'Wicket' way? If not, then I
guess we'll use this one.

>
> On Thu, Sep 3, 2009 at 5:27 AM, Eyal Golan <eg...@gmail.com> wrote:
>
> > Hello,
> > We have in our application the following code:
> >    /**
> >     * @see
> > org.apache.wicket.Application#newRequestCycle(org.apache.wicket.Request,
> >     *      org.apache.wicket.Response)
> >     */
> >    @Override
> >    public RequestCycle newRequestCycle(final Request request,
> >            final Response response) {
> >        return new WebRequestCycle(this, (WebRequest) request,
> >                (WebResponse) response) {
> >
> >            @Override
> >            public Page onRuntimeException(Page page, RuntimeException e)
> {
> >                if (DEPLOYMENT.equalsIgnoreCase(getConfigurationType())) {
> >                    if
> > (PageExpiredException.class.isAssignableFrom(e.getClass())) {
> >                        return null;
> >                    } else {
> >                        e.printStackTrace();
> >                        System.out.println(e.getMessage());
> >                        return new InternalErrorPage(getErrorDisplay(e));
> >                    }
> >                } else {
> >                    // In development we want to see the exception
> >                    return null;
> >                }
> >
> >            }
> >        };
> >    }
> >
> > Also, in our base page we have this
> >    protected void verifyAccess(PageParameters pageParameters) {
> >        // Redirect to Login page on invalid access.
> >        if (!isUserLoggedIn()) {
> >            throw new
> RestartResponseAtInterceptPageException(Login.class);
> >        }
> >        else if (! isPageAllowed(pageParameters)) {
> >            String url = pageParameters.getString("url");
> >            if (url != null) {
> >                throw new
> > AbortWithWebErrorCodeException(HttpServletResponse.SC_FORBIDDEN, url);
> >            }
> >            else {
> >                throw new
> > AbortWithWebErrorCodeException(HttpServletResponse.SC_FORBIDDEN);
> >            }
> >        }
> >    }
> >
> > 'verifyAccess' is called in the construction of the page.
> >
> > The problem I'm having is when the page is not allowed.
> > We throw AbortWithWebErrorCodeException.
> >
> > The user gets a 403 error page.
> > As expected, the onRuntimeException that configured in the WebApp is not
> > reached.
> >
> > I thought to create a RuntimeException that will be thrown instead of the
> > AbortWithWebErrorCodeException(...) and to analyze it in the
> > onRuntimeException.
> > But, is there a way to map the 403 error page to another page? A setting
> of
> > the Application or even in the web.xml?
> >
> > Thanks,
> >
> >
> >
> > Eyal Golan
> > egolan74@gmail.com
> >
> > Visit: http://jvdrums.sourceforge.net/
> > LinkedIn: http://www.linkedin.com/in/egolan74
> >
> > P  Save a tree. Please don't print this e-mail unless it's really
> necessary
> >
>

Re: AbortWithWebErrorCodeException and RequestCycle newRequestCycle

Posted by Pedro Santos <pe...@gmail.com>.
"I thought to create a RuntimeException that will be thrown instead of the
AbortWithWebErrorCodeException(...) and to analyze it in the
onRuntimeException."

don't you gona fall in to the same problem this way?

Set error page in web.xml
   <?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>


    <error-page>
        <error-code>
            403
        </error-code>
        <location>
            /403.*html*
        </location>
    </error-page>

</web-app>



On Thu, Sep 3, 2009 at 5:27 AM, Eyal Golan <eg...@gmail.com> wrote:

> Hello,
> We have in our application the following code:
>    /**
>     * @see
> org.apache.wicket.Application#newRequestCycle(org.apache.wicket.Request,
>     *      org.apache.wicket.Response)
>     */
>    @Override
>    public RequestCycle newRequestCycle(final Request request,
>            final Response response) {
>        return new WebRequestCycle(this, (WebRequest) request,
>                (WebResponse) response) {
>
>            @Override
>            public Page onRuntimeException(Page page, RuntimeException e) {
>                if (DEPLOYMENT.equalsIgnoreCase(getConfigurationType())) {
>                    if
> (PageExpiredException.class.isAssignableFrom(e.getClass())) {
>                        return null;
>                    } else {
>                        e.printStackTrace();
>                        System.out.println(e.getMessage());
>                        return new InternalErrorPage(getErrorDisplay(e));
>                    }
>                } else {
>                    // In development we want to see the exception
>                    return null;
>                }
>
>            }
>        };
>    }
>
> Also, in our base page we have this
>    protected void verifyAccess(PageParameters pageParameters) {
>        // Redirect to Login page on invalid access.
>        if (!isUserLoggedIn()) {
>            throw new RestartResponseAtInterceptPageException(Login.class);
>        }
>        else if (! isPageAllowed(pageParameters)) {
>            String url = pageParameters.getString("url");
>            if (url != null) {
>                throw new
> AbortWithWebErrorCodeException(HttpServletResponse.SC_FORBIDDEN, url);
>            }
>            else {
>                throw new
> AbortWithWebErrorCodeException(HttpServletResponse.SC_FORBIDDEN);
>            }
>        }
>    }
>
> 'verifyAccess' is called in the construction of the page.
>
> The problem I'm having is when the page is not allowed.
> We throw AbortWithWebErrorCodeException.
>
> The user gets a 403 error page.
> As expected, the onRuntimeException that configured in the WebApp is not
> reached.
>
> I thought to create a RuntimeException that will be thrown instead of the
> AbortWithWebErrorCodeException(...) and to analyze it in the
> onRuntimeException.
> But, is there a way to map the 403 error page to another page? A setting of
> the Application or even in the web.xml?
>
> Thanks,
>
>
>
> Eyal Golan
> egolan74@gmail.com
>
> Visit: http://jvdrums.sourceforge.net/
> LinkedIn: http://www.linkedin.com/in/egolan74
>
> P  Save a tree. Please don't print this e-mail unless it's really necessary
>