Tomcat version 6.0.x on Linux OS

Hi all,

I have an application deployed on several customers Tomcat servers.

The Tomcat versions are different (6.0.16, 6.0.37, etc.) and asking all
customers to upgrade to the latest Tomcat version would be too tricky.

I would like to programmatically get the disableURLRewriting context
attribute value, when it exists (i.e Tomcat 6.0.30 onwards).
My purpose is to add a tuckey.org/urlrewrite filter rule that redirects the
user to an error page when the 'jsessionid=' string is detected in the URL.
if (disableURLRewriting exists and its value is true) -> the filter rule
should be applied
if (disableURLRewriting doesn't exist or its value is false) -> the filter
rule should not be applied because Tomcat 6 adds ';jsessionid=xxx' when
there is no cookie in the client browser

The only way that I have found to achieve this on different Tomcat versions
is to use Tomcat classes:

    public boolean isDisableURLRewriting(StandardContext standardContext) {
        Method isDisableURLRewritingMethod = null;
        try {
            isDisableURLRewritingMethod =
StandardContext.class.getMethod("isDisableURLRewriting");
        } catch (Exception e) {
            // the method does not exist or is not accesible
        }
        if (isDisableURLRewritingMethod != null) {
            try {
                return ((Boolean)
isDisableURLRewritingMethod.invoke(standardContext)).booleanValue();
            } catch (Exception e) {
                throw new RuntimeException("Unable to invoke the
isDisableURLRewriting method on the standard context");
            }
        }
        // the method does not exist, we return false
        return false;
    }

    StandardEngine engine = (StandardEngine)
ServerFactory.getServer().findService("Catalina").getContainer();
    Container container = engine.findChild(engine.getDefaultHost());
    StandardContext standardContext = (StandardContext)
container.findChild(context.getContextPath());
    if (isDisableURLRewriting(standardContext)) {
        // apply the rule
    } else {
        // don't apply the rule
    }

1. Will this code work for every Tomcat configuration?
(I know that this code works when the context file is in the
conf/Catalina/localhost directory with the default server.xml file, but I
don't know if it will work when several hosts are defined in the server.xml
file, because I'm using engine.getDefaultHost())
2. Is there a better way to achieve this? (maybe without using Tomcat
classes?)

Thanks in advance,

Regards,

Lo

Reply via email to