Leo Donahue - RDSA IT wrote:
-----Original Message-----
From: André Warnier [mailto:a...@ice-sa.com]
Sent: Friday, November 30, 2012 12:23 AM
To: Tomcat Users List
Subject: Re: Context Path for a subdirectory
On 11/29/2012 11:41 AM, Leo Donahue - RDSA IT wrote:
Reading the docs:
http://tomcat.apache.org/tomcat-7.0-doc/config/context.html

"..The web application used to process each HTTP request is
selected by
Catalina based on matching the longest possible prefix of the
Request URI against the context path of each defined Context."
If I have a webapp, with a www directory, and in that www
directory are
other directories, how would I restrict access to one of those
subdirectories to the localhost?
webapps
  webapp1
   -WEB-INF
     -classes
     -lib
   -www
     -directory1
     -directory2

Is the context path of directory1:  /webapp1/directory1

Would I create a context named directory1.xml such as the following?

<?xml version="1.0" encoding="UTF-8"?> <Context
antiResourceLocking="false" privileged="true"
path="/webapp1/directory1">

   <Valve className="org.apache.catalina.valves.RemoteAddrValve"
          allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
</Context>

Of course you'll still have to map the filter to the correct context
for directory1 in

webapps
 webapp1
  -WEB-INF
    -classes
    -lib
  -www
    -directory1
    -directory2


<filter-mapping>
      <filter-name>Remote Address Filter</filter-name>
      <url-pattern>(??????)</url-pattern>
    </filter-mapping>

and (??????) is .... ?

;-)

Sadly, it's advertised in the help section.

http://planning.maricopa.gov/sdk/rest/gettingstarted.html  scroll to bottom of 
the page.

I could surgery out bullet #7 I suppose, but I'm counting on the filter to work.


Ah well, that is what the user enters, which does not necessarily match the 
layout of your application.
But did I misunderstand, or did you want to have the IP filter apply only to the subdirectory in question ?

Yes, I wanted the IP filter to apply only to 
http://planning.maricopa.gov/rest/admin

I was confused in thinking that if I used a url-pattern, in a context file, of 
/rest/admin that it would restrict access to just admin - based on the longest 
matching prefix - but it restricted access to all of /rest

My "trick question" was about how you would specify the url-pattern so that it 
applies only to:
(webapps)/webapp1/www/directory1 (and not to
(webapps)/webapp1/www/directory2 for instance).


You /can/ use the url-pattern in the <filter-mapping> section. If you map it correctly, the filter will only be active when that sub-directory is the request URL's target.


Using the Container provided Remote Address Filter was a good reason to upgrade 
to Tomcat 7.0.33 from 6.0.35.

If I can tag another question on the end of this thread:

The Remote Address Filter has an option to set the denyStatus from 403 to 404, or whatever. In general, I'm guessing it's better to respond that a restricted resource is not found, rather than respond that is it there but forbidden?

Purely personal opinion : by doing this, you "kind of" violate the spirit of the HTTP specification, and you create some confusion at the technical level.
And, essentially, you are lying to the client.
So, in general, it is not "better".
But hey, it's your server, so you're free to return whatever you believe is 
most appropriate.
Within limits though. For example, if somewhere you provide a link to that section for some people, but when they click on it, they get a "not found", they may think that your application isn't working, or that your documentation is incorrect. While if they get a "forbidden", they may realise that they need to ask for a permission.


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to