Search code examples
apacheweb-applicationsjbosstapestry

Tapestry: How to redirect deprecated URLs to an error page


I have legacy web application built using apache Tapestry. I have deprecated most of the application's functionality except few pages. I want this application to be running in production, but I want to redirect deprecated pages/URLs to some error page with 404 error code. Where should I configure it? I have web.xml and jboss-web.xml. Do I need to do it in some Tapestry configuration file?


Solution

  • You can contribute a RequestFilter to the RequestHandler service, i.e. in your AppModule:

    public void contributeRequestHandler(
                  OrderedConfiguration<RequestFilter> configuration)
    {
        // Each contribution to an ordered configuration has a name,
        // When necessary, you may set constraints to precisely control
        // the invocation order of the contributed filter within the pipeline.
    
        configuration.add("DeprecatedURLs", new RequestFilter() {
            @Override
            public boolean service(Request request,
                                   Response response,
                                   RequestHandler handler) throws IOException
            {
                String path = request.getPath();
                if (isDeprecated(path))
                {
                    response.sendError(404, "Not found");
                    return;
                }
    
                return handler.service(request, response);
            }
        }, "before:*");
    }
    

    Notice the before:* ordering constraint, it should register this filter as the first in RequestHandler's configuration.