On 10/04/2014 14:01, lo lo wrote:
> 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())
So maybe you should test that and see what happens.
> 2. Is there a better way to achieve this? (maybe without using Tomcat
> classes?)
It depends on what you are trying to achieve. You have described a
problem with your current solution but not what your original problem is.
Mark
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]