Hi Scott,
Firstly - changing the subject breaks the threading in many mailreaders!
Securing your application is completely independant of Struts. Neither needs
to know anything about the other - that is why it is such a nice & easy
solution.
Yes - I'm implying exactly what you say I am.
Here's the pseudocode for the filter:
doFilter(...){
if(request.getSession().getAttribute("user" == null)){
//Not authenticated - send all non login request to the
login page
if(request.getServletPath().equals("the login url")){
filterChain.doFilter(..);
}else{
response.sendRedirect("the login page");
}
}else{
//user is authenticated - send the request on it's way
filterChain.doFilter(..)
}
}
That's it.
Paul
> -----Original Message-----
> From: Scott Purcell [mailto:[EMAIL PROTECTED]
> Sent: 2005/14/04 16:03
> To: Struts Users Mailing List
> Subject: Session now with Filter
>
>
> Thank you very much for your comments on this topic Paul.
>
> Now, I understand the basics of using a filter, extending the
> base class and configuration in the web.xml file. But how can
> I use a filter in unison with Struts.
>
> I am not seeing how I would use the filter. Are you implying
> that I should possibly use the filter to check for the
> existance of the session and "user" object? And if the
> session does not exist? use a redirect to the login page? So
> this filter would only look at incoming requests?
>
> Thanks,
> Scott
>
>
>
>
>
> -----Original Message-----
> From: Paul McCulloch [mailto:[EMAIL PROTECTED]
> Sent: Thursday, April 14, 2005 9:33 AM
> To: 'Struts Users Mailing List'
> Subject: RE: Handling Session Expiration Properly
>
>
> Hi Scott,
>
> I can't remeber if it was your question I replied to regarding
> authentication where I recommended using a filter to do this,
> rather than
> modifying the request processor. If it wasn't your question then I'd
> recommend a serach of the archives. If it was you - I still
> think modifying
> the request processor is not the best solution!
>
> Anyway - some comments on the solution you are working with...
>
> I suggest that you only create the user object and attach it
> to the session
> object when the user successfully logs in. The presence of a
> user object in
> session tells your application that there is a valid user -
> and who the user
> is.
>
> If the user's session expires then the next request they make
> will be for a
> new session (with no user) - so they will be sent to the login page.
>
> There is no need to change the signature of your base action. The user
> object is in session which can be obtained from the existing paramater
> "request" - there is no need to explicitly pass the user around.
>
> Changing the base action to manage security throws up some
> other pottential
> problems. If you start to use another action variant, such as
> DispatchAction, you won't have any security. If you really
> don't want to use
> Filters then I suggest that you modify the request processor
> to check that
> the user is logged in before calling your action, and send
> them to the login
> page if they aren't
>
> Seriously though - a filter is far easier (& web framework
> agnostic) way to
> handle this.
>
> HTH, and feel free to carry on beating this one...
>
> Paul
>
>
> > -----Original Message-----
> > From: Scott Purcell [mailto:[EMAIL PROTECTED]
> > Sent: 2005/14/04 15:04
> > To: [email protected]
> > Subject: Handling Session Expiration Properly
> >
> >
> > Hello,
> > I hope I have not beaten this to death on this list, but I
> > have never gotten an answer that has served my interest. So I
> > rethought the question and I am reposting it now.
> >
> > The application I created, is a web-app in which a login is
> > required of a "username" and "password". Pretty standard
> > stuff. I am not using container authentication, I am just
> > going to a database and pulling out data based upon the entries.
> >
> > The way I configured this, is I extended the
> > RequestProcessor, and each time a user hits the Controller, I
> > check if there is a "user" object in the session. If there is
> > great. If not I create a new one and set a logged in boolean
> > to false. Now if the user has successfully logged in, I set
> > the logged in boolean to true.
> >
> > This step is where I ran into problems. I checked the FAQ on
> > session expiration handling, and the FAQs recommended
> > extending a base action class and checking for the logged in
> > flag. If the flag was not set, then I would throw a global
> > exception, throw them to the front door with a ActionMessage
> > stating "session expired".
> >
> > Now don't get me wrong this works, but by extending the
> > Action class I kind of screwed myself by not being able to
> > use a RequestDispatcher because now the signature of the
> > "subclassed action" was not the same as what the
> > requestDispatcher is looking for. When I extended the Action,
> > I added a check for the user flag:
> > eg:
> > public ActionForward executeAction(ActionMapping mapping,
> > ActionForm form,
> > HttpServletRequest request,
> > HttpServletResponse response,
> > AppObject appObject,
> > UserObject user)
> > throws Exception {
> >
> >
> > So to sum this up, when I am in the RequestProcessor, is
> > there anyway to find the Action they are going to, so I can
> > do my check of logged in? I am looking at the method
> > signature and do not see anything but a request and response
> > object here.
> >
> > Or is there another method I should be extending to find out
> > where they are going? Because if I can see that they are
> > going to an inside page, and their flag is set to "not logged
> > in", then I can send them to the front door with a message
> > stating "session expired" and not send the message to people
> > who are just hitting the front login page.
> >
> > If this does not make sense, please email me back.
> >
> > Thanks for your time,
> > Scott
> >
> >
> >
> ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
>
> Axios Email Confidentiality Footer
> Privileged/Confidential Information may be contained in this
> message. If you are not the addressee indicated in this
> message (or responsible for delivery of the message to such
> person), you may not copy or deliver this message to anyone.
> In such case, you should destroy this message, and notify us
> immediately. If you or your employer does not consent to
> Internet email messages of this kind, please advise us
> immediately. Opinions, conclusions and other information
> expressed in this message are not given or endorsed by my
> Company or employer unless otherwise indicated by an
> authorised representative independent of this message.
> �
> WARNING:
> While Axios Systems Ltd takes steps to prevent computer
> viruses from being transmitted via electronic mail
> attachments we cannot guarantee that attachments do not
> contain computer virus code. You are therefore strongly
> advised to undertake anti virus checks prior to accessing the
> attachment to this electronic mail. Axios Systems Ltd grants
> no warranties regarding performance use or quality of any
> attachment and undertakes no liability for loss or damage
> howsoever caused.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]