Pattern sorting problem (BUG?) Re: Regex use
Robert Ellis Parrott <[email protected]> Thu, 2 Jan 2003 11:57:23 -0500 (EST)
| Newsgroups | gmane.comp.java.securityfilter.user |
|---|---|
| Message-ID | <[email protected]> |
I gave your suggestion below for ordering url patterns a try, and I
believe that there is some bug in the code at this point. This is all
based on latest CVS.
The security constraints are as follows:
<!-- Default configuration: secure all to begin with -->
<security-constraint>
<web-resource-collection>
<web-resource-name>Basic Secured resources</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>member</role-name>
</auth-constraint>
</security-constraint>
<security-constraint>
<web-resource-collection>
<web-resource-name>Public</web-resource-name>
<url-pattern>/index.jsp</url-pattern>
<url-pattern>/public-index.jsp</url-pattern>
<url-pattern>/public/*</url-pattern>
</web-resource-collection>
</security-constraint>
I inserted some debugging code just after the sort in
SecurityFilter.init(); the output is as follows:
SecurityFilter.init: ordered patterns:
1) /public/* (order in config file: 4 type: 1 len: 1 )
2) /* (order in config file: 1 type: 1 len: 0 )
3) /index.jsp (order in config file: 2 type: 3 len: 0 )
4) /public-index.jsp (order in config file: 3 type: 3 len: 0 )
According to your statements below, the type 3 patterns should come first.
Is this correct?
For reference, the code inserted right after the
Collections.sort(patternList);
is:
System.out.println("SecurityFilter.init: ordered patterns:");
order = 1;
for (Iterator i = patternList.iterator(); i.hasNext();) {
URLPattern pat = (URLPattern) i.next();
System.out.println(" "+order+") "+pat.getPattern() +
" (order in config file: "+pat.getOrder()+
" type: "+pat.getPatternType()+" len:
"+pat.getPathLength()+" )");
order++;
}
On Wed, 1 Jan 2003, Max Cooper wrote:
> Rob,
>
> I am in the process of converting SecurityFilter to the no-regex scheme
> recently submitted by Chris N. in some messages to this list. This scheme
> works for the pattern language defined in the Servlet spec, which is the
> document that guides development on SecurityFilter.
>
> >From your description, it sounds like you should be able to do what you need
> with the standard patterns. Here's an example (that should work with the
> current implementation; replace the '/*' pattern with '/' when the default
> servlet support is fixed/added in SecurityFilter):
>
> <security-constraint>
> <web-resource-collection>
> <web-resource-name>Secure</web-resource-name>
> <url-pattern>/*</url-pattern>
> </web-resource-collection>
> <auth-constraint>
> <role-name>role_that_all_authenticated_users_have</role-name>
> </auth-constraint>
> </security-constraint>
>
> <security-constraint>
> <web-resource-collection>
> <web-resource-name>Public</web-resource-name>
> <url-pattern>/index.jsp</url-pattern>
> <url-pattern>/public/*</url-pattern>
> </web-resource-collection>
> </security-constraint>
>
> The order of pattern matching should be:
>
> /index.jsp (EXACT_TYPE)
> /public/* (PATH_TYPE, comes before /* because it has more path elements than
> than /*)
> /*
>
> So visitors should be able to get to the index.jsp page and anything in
> /public without being authenticated (since no auth-constraints are set for
> those patterns). Everything else will require the user to be authenticated
> and in the role_that_all_authenticated_users_have role to gain access. If
> the configuration above doesn't work as you need it to, please post about
> what doesn't seem to work. It is off-the-cuff rather than tested, so it
> might not be quite right.
>
> I am interested in the possibilities of supporting more advanced security
> based on URL patterns, but spec compliance is the primary goal. Perhaps a
> regex system will be added back in as "extended features" are desired. Some
> matching based on a more powerful pattern language, perhaps including the
> query string, with plug-ins for determining access would be a useful way to
> separate security processing from functional processing, for instance.
> Imagine a mapping of the pattern /accountDetails.do* to a piece of code
> (specfied by a class name that implements a security checking interface)
> that will take the URL with the query string (or just the request) and then
> decide if access should be allowed or denied. The check would be by who owns
> the account rather than roles in this case (though normal role-based
> patterns may be processed first). Any persistent objects that need to be
> loaded for the security check could be passed via request attributes to the
> functional level (with some pain of coupling the security and functional
> layers), and perhaps different responses could be supported for error
> ("account does not exist") versus "access denied" cases, if that would be
> useful. Anyway, this example doesn't require regex stuff, but perhaps as we
> flesh out some more requirements, regex support will be needed again. It
> would probably be best to offer these extended features as a separate filter
> for use with container-managed authentication for portability, though
> perhaps there is something to gain by having SecurityFilter support both the
> container-clone stuff and the extended features. These are just ideas at
> this point with no code to speak of at this time.
>
> -Max
>
> ----- Original Message -----
> From: "Robert Ellis Parrott" <[email protected]>
> To: <securityfilter-user-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org>
> Sent: Tuesday, December 31, 2002 2:38 PM
> Subject: [securityfilter-user] Regex use
>
>
> >
> > I looked into SecurityFilter originally because I needed to protect
> > almost all resources within a webapp except for a few that represent a
> > front door view, and login page components, and I thought that regex
> > functionality could do this for me. I had hoped that I could specify a
> > regex in the config file, since they are so powerful.
> >
> > However, the way that SecurityFilter works is that it assumes a
> > significantly simpler URL Pattern in the config file, so that my regex
> > expressions are mauled up.
> >
> > What I had wanted to do was match almost every URL expect those under a
> > /public directory, and one index.jsp page, so that instead of manually
> > securing a resource, the default is that it's secure and you have to
> > manually unsecure it.
> >
> > I propose that true and untampered regex functionality be included in the
> > matching code; this is a small modification, but allows for much more
> > powerful matching ability. I've made a modification to URLPattern to
> > accomplish this; basically, prefixing a URLPattern value by "RE:" tells
> > URLPattern to interpret it as a true regular expression, and compiler it
> > as is. I don't think that the string "RE:" will clash with any URL
> > pattern.
> >
> > And as for the suggestions that regex capability be removed, I agree that
> > it might be removed for some pattern types, but should still be available,
> > at least for this functionality.
> >
> > rob
> >
> >
> >
> >
> patch: ---------------------------------------------------------------------
> >
> > Index: URLPattern.java
> > ===================================================================
> > RCS file:
> >
> /cvsroot/securityfilter/securityfilter/src/share/org/securityfilter/filter/U
> RLPattern.java,v
> > retrieving revision 1.1
> > diff -r1.1 URLPattern.java
> > 85a86,90
> > > /**
> > > * Pattern type for patterns that are regular expressions themselves;
> > > * they are preceeded by "RE:".
> > > */
> > > public static final int RE_TYPE = 4;
> > 189c194,197
> > < if (pattern.startsWith("*.")) {
> > ---
> > >
> > > if (pattern.startsWith("RE:") ) {
> > > patternType = URLPattern.RE_TYPE;
> > > } else if (pattern.startsWith("*.")) {
> > 251a260,263
> > >
> > > // however, if RE_TYPE, assume that input was valid RE, and just
> remove "RE:" prefix
> > > if (patternType == RE_TYPE) { convertedPattern =
> pattern.substring(3);}
> > >
> >
> >
> >
> >
> >
> > -------------------------------------------------------
> > This sf.net email is sponsored by:ThinkGeek
> > Welcome to geek heaven.
> > http://thinkgeek.com/sf
> > _______________________________________________
> > securityfilter-user mailing list
> > securityfilter-user-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
> > https://lists.sourceforge.net/lists/listinfo/securityfilter-user
> >
>
>
-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf