Hi Daniel,

You wrote:
                "And if you got paranoid you could even protect your JSPs
from being accesed directly by
                disallowing any other hosts to access /whatever/*.jsp but
your local host."

How can I do that? Is it container specific?

I've also written my own model 2 security mechanism provided by the
controller servlet - everything works great, but I don't know how to stop
users from invoking my jsp's directly.

For example, if an application link is:
/servletMapName/doLogin

how can I protect against a user directly accessing a page via its file
system location, such as:
 /jsp/login.jsp ?

Thanks,
Scott

                -----Original Message-----
                From:   Daniel Lopez [mailto:[EMAIL PROTECTED]]
                Sent:   Tuesday, June 13, 2000 12:16 PM
                To:     [EMAIL PROTECTED]
                Subject:        Re: JSP mapping to my own servlet?

                Hi Kevin,

                I've done pretty much what you are asking for in our WebLeaf
framework,
                so I'll add my own comments intermixed ;).

                ------------------------------
                Date:    Mon, 12 Jun 2000 10:24:06 -0700
                From:    "Craig R. McClanahan"
<[EMAIL PROTECTED]>
                Subject: Re: JSP mapping to my own servlet?
                >Kevin Duffey wrote:
                >
                >> Hi,
                >>
                >> I was wondering, following the Struts framework, Model 2,
etc..since
                >> servlets merely map the JSP extension to their own
incarnation of
                >> JSPServlet, is it possible to map all JSP pages to my
ControllerServlet
                >(or
                >> for that matter, the controller servlet of the Struts
framework), so
                >that I
                >> could place security abilities and other things (making
sure pages they
                try
                >> to access are allowed..if they are logged in or not,
etc)? If so, is
                >there a
                >> lot involed in such a task?

                That actually depends on what you want to do in the
controller servlet.
                We do have customizable-flexible-dynamic authentication and
                application-wide event handling. As the security part is
somehow
                sophisticated (error messages specify "wrong password, user
doesn't
                exist..", concurrent access is controlled...) then it has
not been a
                one-day task. On the other hand, we are quite happy with the
result and
                we have been using it since then.


                >>I know I could just remap the servers JSP
                >> mapping, but I am wondering if it makes more sense to
just comment out
                their
                >> mapping, and put the JSP mapping into my web.xml for my
application..or
                can
                >> I leave the servers there, but map it anyways..and my
web.xml mapping
                would
                >> override the servers?
                >>

                >Mapping the JSP extension to your controller servlet means
that you have
                >to do
                >everything the JSP servlet would have done (compile the
page if the source
                >is
                >newer, execute the corresponding servlet, and so on).  This
is not for the
                >faint of
                >heart :-).

                Craig is right, of course ;). What I did before getting into
the Model2
                world was to create a base JSP class that implemented the
security
                routines and then force the JSP generated class to extend
this base
                secured class using the "extends" JSP directive. It worked
even though I
                had some problems with some engines tha t were not compliant
to the spec
                so the extends directive didn't work. Then I got into the
Model 2
                arquitecture and used JSP just as a view so I implemented
the security
                in the controller and I was much happier.
                Then I moved to Model 3 and I don't use JSP so I was
reassured that
                implementing this in the controller and not in the JSPs was
the right
                choice.

                >If you are building your app for a servlet container that
implements the
                >version
                >2.2 spec (and in particular the security constraints
stuff), my answer
                >would be
                >"you are trying to work to hard."  Just let the servlet
container's
                >security
                >constraints deal with authentication and access checking.

                If the specification was flexible and complete enough I
would agree
                with  Craig in this point. That was the reason that "forced"
me to
                create my own. On the other hand, I agree that if your
security scheme
                is not complicated and you just want to use standard things,
then you
                might try to go for the JSDK2.2 approach which is "simpler".
However,
                take into account that your user-role mapping will be
container
                specific, and that you will have to specify the roles
required for your
                URLs in a static xml file, so you cannot specify a different
required
                role depending on a parameter...

                >In an environment where you want to (or must) do your own
checking, it is
                >not hard
                >to contemplate building a little custom tag of your own
that checks the
                >user's
                >session for a particular attribute key, and forward to your
login page if
                >it's
                >missing (either because the user tried to jump into the
middle of your
                >application,
                >or because the old session timed out).  Role checking would
make this
                >custom tag
                >only slightly more complicated -- something like:

                >    <mytags:checkLogin role="manager"/>

                >at the top of each page that needed "manager" role could
also do the
                >access control
                >checking for you, by looking at the properties of your user
login object.
                >Writing
                >your own custom tags is a pretty simple exercize --
especially since you
                >can use
                >Struts for examples!

                >Doing this in a generic way (say, in Struts) would not be
too tough for
                >the simple
                >login check (just use servlet context attributes to define
the attribute
                >key to
                >look for, and the name of the login page to forward to).
Doing the role
                >check
                >generically would be somewhat tougher, because there is no
generic way to
                >say "what
                >roles does the current user have" unless you are using the
servlet
                >container's
                >authentication support, where you can call
request.isUserInRole() to
                >answer this
                >question.

                Or unless you implement a similar call in your security
environment,
                which I did. ;)


                >>
                >> Furthermore, what I would really like to do, since my
entire site is
                solid
                >> JSP now (other than a few static html pages) because I
include the same
                >> header and footer on every page (using JSP include
directives), I merely
                >> want all JSP pages to go on to the JSP Servlet..but I
just want one
                central
                >> location for security reasons..so any JSP request allows
my one servlet
                to
                >> make sure the page being accessed is allowed by the
person accessing it.

                What I do is that when I want to protect a JSP page, I just
configure an
                "operation" in the controller servlet that simply forwards
the request
                to the JSP page and then I implement security upon the
operation. I
                already have a predefined action class that does
                that(JSPForwardOperation) so I just have to configure the
XML
                appropriately. Much simpler than the taglib approach. And if
you got
                paranoid you could even protect your JSPs from being accesed
directly by
                disallowing any other hosts to access /whatever/*.jsp but
your local
                host.

                >That is exactly what the security constraints in the 2.2
spec are about --
                >making
                >it the container's responsibility to check this stuff,
instead of the
                >application's
                >problem.

                Right again, but not the specification is not enough yet,
IMHO, to allow
                you to do that in all the cases.

                >In the mean time, just code a custom tag that does the
checks you want,
                >and include
                >it at the top of every JSP page, and you're done.

                >> Thanks for any info.

                >Craig McClanahan
                ------------------------------

                Just as proof that the spec is not enough, check the
containers that are
                updated to JSDK2.2 and you'll see that almost all of them
have a
                container-specific way of authenticating the users and/or a
                container-specific way of mapping users to roles. Even
Tomcat has its
                own. So  that's the reason why I implemented my own scheme:
because I
                didn't want to go back to container-specific applications
again!

                Just my 2c
                Dan
                -------------------------------------------
                Daniel Lopez Janariz ([EMAIL PROTECTED])
                Web Services
                Computer Center
                Balearic Islands University
                -------------------------------------------


===========================================================================
                To unsubscribe: mailto [EMAIL PROTECTED] with body:
"signoff JSP-INTEREST".
                Some relevant FAQs on JSP/Servlets can be found at:

                 http://java.sun.com/products/jsp/faq.html
                 http://www.esperanto.org.nz/jsp/jspfaq.html
                 http://www.jguru.com/jguru/faq/faqpage.jsp?name=JSP
                 http://www.jguru.com/jguru/faq/faqpage.jsp?name=Servlets

===========================================================================
To unsubscribe: mailto [EMAIL PROTECTED] with body: "signoff JSP-INTEREST".
Some relevant FAQs on JSP/Servlets can be found at:

 http://java.sun.com/products/jsp/faq.html
 http://www.esperanto.org.nz/jsp/jspfaq.html
 http://www.jguru.com/jguru/faq/faqpage.jsp?name=JSP
 http://www.jguru.com/jguru/faq/faqpage.jsp?name=Servlets

Reply via email to