You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by Paweł Wielgus <po...@gmail.com> on 2009/03/31 01:36:10 UTC

Re: Handling Browser Back/Forward Button in Struts2

Hi Shekher,
i just added a small app, that work for me, on my blog post,
if You are still interested, it's been a while - sorry for the lag,
You can download it from there.
http://poulwiel.blogspot.com/2009/01/browser-back-button-and-caching-problem.html

Best greetings,
Pawel Wielgus.

2009/1/26, shekher awasthi <sh...@gmail.com>:
> Thanks Pawel for such detalied description
>
> i did all the things as mentioned by you but still its not working for me
>
> regarding SSL its working for me bt still caching problem is there
>
> i will again dig deep in to it and if you can provide me a small app that
> will be wonderfull i can use that to compare my functionality so that i can
> find out where i am doing wrong or whats going wrong in my application.
>
>
> On 1/26/09, Paweł Wielgus <po...@gmail.com> wrote:
>>
>> Hi Shekher,
>> what i did is:
>> 1. I added on every page:
>>
>>          <meta http-equiv="Pragma" content="no-cache"/>
>>          <meta http-equiv="Cache-Control" content="no-cache"/>
>>          <meta http-equiv="Expires" content="-1"/>
>>
>> - in <head> section at the begining of page and after <body> just
>> before </html> i added:
>>
>> <head>
>>          <meta http-equiv="pragma" content="no-cache"/>
>>          <meta http-equiv="cache-control" content="no-cache"/>
>>          <meta http-equiv="expires" content="-1"/>
>> </head>
>> - so it is doubled!
>>
>> 2. I added to every response:
>>
>>        response.setHeader("Pragma", "no-cache");
>>        response.setHeader("Cache-Control", "no-cache");
>>        response.setHeader("Expires", "-1");
>>
>> And that's working for me under ssl. As for ssl it has nothing to do
>> with struts2, it's controlled by tomcat or any other server You are
>> using, i know there is ssl-plugin for s2 but i honestly don't know
>> what for, maybe it is targeted for checking if request is under ssl
>> and if not redirecting to ssl connection, but it's not turning ssl on
>> for sure.
>>
>> If that won't help i can make a little app and pack it up for You, but
>> it can take some time.
>>
>> Best greetings,
>> Paweł Wielgus.
>>
>> 2009/1/25 shekher awasthi <sh...@gmail.com>:
>> > Hi Hi Paweł,
>> >
>> > i tried all the way in secure way
>> >
>> > i implimented SSL and now my tomcat is running on port 8443 usinh https
>> > protocol
>> > i have created a custom interceptor for setting the header values
>> >
>> > when user click logg off button this custom interceptor is working
>> setting
>> > the header values below is the code i am using
>> >
>> > ActionContext context=invocation.getInvocationContext();
>> >            HttpServletResponse
>> > response=(HttpServletResponse)context.get(StrutsStatics.HTTP_RESPONSE);
>> >            if(response!=null){
>> >                System.out.println("**********setting
>> > header**************");
>> >                response.setHeader("Cache-Control", "must-revalidate");
>> >                response.setHeader("Cache-Control", "max-age=0");
>> >                response.setHeader("Pragma", "no-cache");//HTTP 1.1
>> >                response.setDateHeader ("Expires", 0); //prevents caching
>> at
>> > the proxy
>> >                response.setHeader("Cache-Control","no-store"); //HTTP
>> > 1.1
>> >
>> >            }
>> >
>> > and on my logot message i have something like this
>> >
>> > <META content="MSHTML 6.00.2900.2180" name=GENERATOR>
>> > <META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
>> > <META HTTP-EQUIV="EXPIRES" CONTENT="-1">
>> > <META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">
>> >
>> > but still results are same
>> > i can go back to secure page using browser back button
>> > any idea  why this is going on??
>> >
>> > or do i need to set anything apart from this?
>> >
>> > -shekher
>> >
>> > On Fri, Jan 23, 2009 at 9:06 PM, shekher awasthi
>> > <sh...@gmail.com>wrote:
>> >
>> >> Can you guide me the way how to use SSL in struts2 i am looking in to
>> this
>> >>
>> >> IDE i am using is MyEclispe
>> >>
>> >> and i am testing it using tomcat
>> >>
>> >> On Fri, Jan 23, 2009 at 7:33 PM, Paweł Wielgus <po...@gmail.com>
>> wrote:
>> >>
>> >>> Hi Shekher,
>> >>> all my testing was under SSL connection. So without pragma and cache
>> >>> control it's not working - sadly.
>> >>>
>> >>> Best greetings,
>> >>> Paweł Wielgus.
>> >>>
>> >>> 2009/1/22 shekher awasthi <sh...@gmail.com>:
>> >>>  > Hi Paweł,
>> >>> >
>> >>> > another way we can do this by using SSL
>> >>> > as we are dealing in secure zone so using SSL for this might be a
>> good
>> >>> case.
>> >>> >
>> >>> > the application i have seen so far who have dealt with this
>> back/forward
>> >>> > button always using HTTPS protocol.
>> >>> >
>> >>> > i am also diving in to this case study and will share the results
>> >>> >
>> >>> >
>> >>> > On 1/22/09, shekher awasthi <sh...@gmail.com> wrote:
>> >>> >>
>> >>> >> one of the banking application site which i tested today
>> >>> >>
>> >>> >> when user get logged off from and try to hit the back button he
>> >>> >> will
>> be
>> >>> >> shown a different page
>> >>> >> instead the one in the cache
>> >>> >> so i am also loking in to this aspect.
>> >>> >>
>> >>> >>
>> >>> >>  On 1/22/09, shekher awasthi <sh...@gmail.com> wrote:
>> >>> >>>
>> >>> >>> using javascript is not a sure short solution
>> >>> >>> as i tested it throughly and javascript behaviour is not
>> >>> >>> consistent
>> >>> >>> throught
>> >>> >>>
>> >>> >>> regarding setting header i did this i developed a custom
>> interceptor
>> >>> which
>> >>> >>> is doing this
>> >>> >>>
>> >>> >>> but again its not worked as expected.
>> >>> >>> i am still clueless how online banking application doing this
>> >>> >>> trick
>> >>> >>>
>> >>> >>> i am still on R&D mode for this if find anything will share it
>> >>> >>>
>> >>> >>>
>> >>> >>>  On 1/22/09, Paweł Wielgus <po...@gmail.com> wrote:
>> >>> >>>>
>> >>> >>>> Hi Ehtesham,
>> >>> >>>> it was said before on this thread that user can simply turn of
>> >>> >>>> javascript whenever he wants,
>> >>> >>>> thats why i was looking for more server controlled solution. But
>> >>> thank
>> >>> >>>> You for pointing it out, You made me to add it to my blog post.
>> >>> >>>>
>> >>> >>>> Best greetings,
>> >>> >>>> Paweł Wielgus.
>> >>> >>>>
>> >>> >>>> 2009/1/22 Ehteshamul Haque <eh...@yahoo.com>:
>> >>> >>>> >
>> >>> >>>> >
>> >>> >>>> >
>> >>> >>>> > Hi,
>> >>> >>>> >
>> >>> >>>> > I am not that much expert I I used the following javascript
>> >>> >>>> > code
>> >>> before
>> >>> >>>> in each page and it workded fine.
>> >>> >>>> >
>> >>> >>>> >
>> >>> >>>> > <script language="JavaScript">
>> >>> >>>> > var x=window.history.length;
>> >>> >>>> > if (window.history[x]!=window.location)
>> >>> >>>> > {
>> >>> >>>> >     window.history.forward();
>> >>> >>>> > }
>> >>> >>>> > </script>
>> >>> >>>> >
>> >>> >>>> > If it work for you I will be very happy.
>> >>> >>>> >
>> >>> >>>> > Thank you.
>> >>> >>>> >
>> >>> >>>> > -Ehtesham
>> >>> >>>> >
>> >>> >>>> >
>> >>> >>>> > --- On Thu, 1/22/09, Paweł Wielgus <po...@gmail.com> wrote:
>> >>> >>>> >
>> >>> >>>> > From: Paweł Wielgus <po...@gmail.com>
>> >>> >>>> > Subject: Re: Handling Browser Back/Forward Button in Struts2
>> >>> >>>> > To: "Struts Users Mailing List" <us...@struts.apache.org>
>> >>> >>>> > Date: Thursday, January 22, 2009, 12:34 AM
>> >>> >>>> >
>> >>> >>>> > Hi Shekher,
>> >>> >>>> > it was very interesting subject, so i dig a little more.
>> >>> >>>> > Here [1] is what i found, with some tests.
>> >>> >>>> > Basicly it turns out that You should add headers in page and to
>> >>> >>>> response.
>> >>> >>>> >
>> >>> >>>> > [1] -
>> >>> >>>>
>> >>>
>> http://poulwiel.blogspot.com/2009/01/browser-back-button-and-caching-problem.html
>> >>> >>>> >
>> >>> >>>> > Best greetings,
>> >>> >>>> > Paweł Wielgus.
>> >>> >>>> >
>> >>> >>>> > 2009/1/21 shekher awasthi <sh...@gmail.com>:
>> >>> >>>> >> Is it possible that either i should only put these header in
>> the
>> >>> >>>> logout
>> >>> >>>> >> action
>> >>> >>>> >>
>> >>> >>>> >> where i am removing the session and den redirecting the user
>> >>> >>>> >> to
>> >>> index
>> >>> >>>> page
>> >>> >>>> >> something like this
>> >>> >>>> >>
>> >>> >>>> >> HttpServletResponse response=null;
>> >>> >>>> >>         response=ServletActionContext.getResponse();
>> >>> >>>> >>
>> >>> >>>> >>             response.setHeader("Pragma", "no-cache");
>> >>> >>>> >>             response.setHeader("Cache-Control", "no-cache");
>> >>> >>>> >>             response.setHeader("Expires", "0");
>> >>> >>>> >>
>> >>> >>>> >> or can we create a interceptor which can do this for all the
>> >>> request
>> >>> >>>> wheer
>> >>> >>>> >> we want this feature??
>> >>> >>>> >>
>> >>> >>>> >> 2009/1/21 shekher awasthi <sh...@gmail.com>
>> >>> >>>> >>
>> >>> >>>> >>> i tried using setting the eader values but they are not
>> working
>> >>> as
>> >>> >>>> expected
>> >>> >>>> >>> i can even
>> >>> >>>> >>>
>> >>> >>>> >>> go and move back using broswer back button.
>> >>> >>>> >>>
>> >>> >>>> >>> if i will find anything helpfull will share with you
>> >>> >>>> >>> till then hard luck
>> >>> >>>> >>> :)
>> >>> >>>> >>>
>> >>> >>>> >>> 2009/1/21 Paweł Wielgus <po...@gmail.com>
>> >>> >>>> >>>
>> >>> >>>> >>> Hi Shekher,
>> >>> >>>> >>>> what i meant is that it can be done from server side.
>> >>> >>>> >>>> Check for example Your e-banking application, i did it on
>> mine
>> >>> :-).
>> >>> >>>> >>>> There, when You press back button browser won't serve You
>> cached
>> >>> >>>> page
>> >>> >>>> >>>> but ask server for fresh one - this is controlled with
>> >>> content-cache
>> >>> >>>> >>>> and pragma, but i can't be more helpfull to You here because
>> i
>> >>> >>>> haven't
>> >>> >>>> >>>> done it before.
>> >>> >>>> >>>>
>> >>> >>>> >>>> Best greetings,
>> >>> >>>> >>>> Paweł Wielgus.
>> >>> >>>> >>>>
>> >>> >>>> >>>>
>> >>> >>>> >>>> 2009/1/21 shekher awasthi <sh...@gmail.com>:
>> >>> >>>> >>>>  > Hi Paweł,
>> >>> >>>> >>>> >
>> >>> >>>> >>>> > thats true it only send request to server if  i will
>> refresh
>> >>> the
>> >>> >>>> page
>> >>> >>>> >>>> and
>> >>> >>>> >>>> > for that i have already custom interceptor places which is
>> >>> >>>> checking the
>> >>> >>>> >>>> user
>> >>> >>>> >>>> > object in session in order to confirm that the request is
>> from
>> >>> >>>> >>>> authorized
>> >>> >>>> >>>> > user
>> >>> >>>> >>>> >
>> >>> >>>> >>>> > but when i make use of back button it serve the page from
>> the
>> >>> >>>> local
>> >>> >>>> >>>> > chache,so the problem is related to client side more than
>> that
>> >>> of
>> >>> >>>> server
>> >>> >>>> >>>> > handling
>> >>> >>>> >>>> >
>> >>> >>>> >>>> > still trying to find a firm solution for it
>> >>> >>>> >>>> >
>> >>> >>>> >>>> > 2009/1/20 Paweł Wielgus <po...@gmail.com>
>> >>> >>>> >>>> >
>> >>> >>>> >>>> >> Hi Shekher,
>> >>> >>>> >>>> >> first try this scenario:
>> >>> >>>> >>>> >> 1. logout user
>> >>> >>>> >>>> >> 2. back button - check for logs if action was fired
>> >>> >>>> >>>> >> 3. refresh page - check for logs if action was fired
>> >>> >>>> >>>> >> Most likely only the 3. will fire action because browser
>> will
>> >>> >>>> serve
>> >>> >>>> >>>> >> cached version of that page.
>> >>> >>>> >>>> >> I was about to write that to deal with it You can use
>> https
>> >>> >>>> scheme,
>> >>> >>>> >>>> >> but i just got it checked and it's not true. So maybe
>> using
>> >>> >>>> pragma and
>> >>> >>>> >>>> >> or cache-control will do?
>> >>> >>>> >>>> >>
>> >>> >>>> >>>> >> Still user can disable javascript so solution with script
>> >>> might
>> >>> >>>> not
>> >>> >>>> >>>> work.
>> >>> >>>> >>>> >> If You find out anything more please let us know.
>> >>> >>>> >>>> >>
>> >>> >>>> >>>> >> Best greetings,
>> >>> >>>> >>>> >> Paweł Wielgus.
>> >>> >>>> >>>> >>
>> >>> >>>> >>>> >>
>> >>> >>>> >>>> >> 2009/1/20 Robert Graf-Waczenski <rg...@lsoft.com>:
>> >>> >>>> >>>> >>  > You don't write if the browser back button is supposed
>> to
>> >>> be
>> >>> >>>> >>>> functional
>> >>> >>>> >>>> >> in
>> >>> >>>> >>>> >> > your application (in many cases it is not, but YMMV).
>> >>> >>>> >>>> >> >
>> >>> >>>> >>>> >> > If you want to disable the browser back button, use the
>> >>> code
>> >>> >>>> below in
>> >>> >>>> >>>> all
>> >>> >>>> >>>> >> > your pages:
>> >>> >>>> >>>> >> >
>> >>> >>>> >>>> >> > <script type="text/javascript">
>> >>> >>>> >>>> >> > history.forward();
>> >>> >>>> >>>> >> > </script>
>> >>> >>>> >>>> >> >
>> >>> >>>> >>>> >> > I'm not aware of any feature in Struts2 that deals with
>> the
>> >>> >>>> browser
>> >>> >>>> >>>> back
>> >>> >>>> >>>> >> > button.
>> >>> >>>> >>>> >> >
>> >>> >>>> >>>> >> > Robert
>> >>> >>>> >>>> >> >
>> >>> >>>> >>>> >> >
>> >>> >>>> >>>> >> > shekher awasthi wrote:
>> >>> >>>> >>>> >> >>
>> >>> >>>> >>>> >> >> Hi All,
>> >>> >>>> >>>> >> >>
>> >>> >>>> >>>> >> >> in the process of developing application using struts
>> >>> 2.0.11,
>> >>> >>>> i came
>> >>> >>>> >>>> >> >> across
>> >>> >>>> >>>> >> >> the problem of handling browser back/forward button.
>> >>> >>>> >>>> >> >>
>> >>> >>>> >>>> >> >> This problem is occurring when we will logout the
>> user.On
>> >>> >>>> Clicking
>> >>> >>>> >>>> the
>> >>> >>>> >>>> >> >> logout button we are currently removing the user from
>> the
>> >>> >>>> session
>> >>> >>>> >>>> >> >>
>> >>> >>>> >>>> >> >> and it worked fine for us. After the successful logout
>> >>> process
>> >>> >>>> user
>> >>> >>>> >>>> will
>> >>> >>>> >>>> >> >> be
>> >>> >>>> >>>> >> >> redirected to the index page(which have the login
>> field),
>> >>> >>>> >>>> >> >>
>> >>> >>>> >>>> >> >> but when user hits the browser back button he is
>> getting
>> >>> >>>> himself
>> >>> >>>> >>>> there
>> >>> >>>> >>>> >> in
>> >>> >>>> >>>> >> >> the secure page even we have remove the user object
>> from
>> >>> the
>> >>> >>>> session
>> >>> >>>> >>>> >> >>
>> >>> >>>> >>>> >> >> below is the code we are using for removing the user
>> >>> >>>> >>>> >> >>
>> >>> >>>> >>>> >> >> session.remove(BSConstant.USER);
>> >>> >>>> >>>> >> >>
>> >>> >>>> >>>> >> >> i am clueless where we are doing wrong , as we think
>> >>> >>>> >>>> >> >> we
>> >>> are
>> >>> >>>> having
>> >>> >>>> >>>> two
>> >>> >>>> >>>> >> >> points
>> >>> >>>> >>>> >> >>
>> >>> >>>> >>>> >> >> 1) Either the user is not getting removed from the
>> >>> session,but
>> >>> >>>> the
>> >>> >>>> >>>> >> chances
>> >>> >>>> >>>> >> >> are very less as for all other call after logout it is
>> >>> forcing
>> >>> >>>> the
>> >>> >>>> >>>> user
>> >>> >>>> >>>> >> to
>> >>> >>>> >>>> >> >> login first.
>> >>> >>>> >>>> >> >>
>> >>> >>>> >>>> >> >> 2) Back button handling is not there
>> >>> >>>> >>>> >> >>
>> >>> >>>> >>>> >> >> my question is, Is there any way in struts2 to handle
>> >>> browser
>> >>> >>>> >>>> >> back/forward
>> >>> >>>> >>>> >> >> button or do i need to use some other technique like
>> >>> >>>> >>>> >> >>
>> >>> >>>> >>>> >> >> setting response header
>> >>> >>>> >>>> >> >>
>> >>> >>>> >>>> >> >> any suggestion in this regard will be much
>> >>> >>>> >>>> >> >> appreciated.
>> >>> >>>> >>>> >> >>
>> >>> >>>> >>>> >> >> -s
>> >>> >>>> >>>> >> >>
>> >>> >>>> >>>> >> >>
>> >>> >>>> >>>> >> >
>> >>> >>>> >>>> >> >
>> >>> >>>> >>>> >> >
>> >>> >>>>
>> ---------------------------------------------------------------------
>> >>> >>>> >>>> >> > To unsubscribe, e-mail:
>> user-unsubscribe@struts.apache.org
>> >>> >>>> >>>> >> > For additional commands, e-mail:
>> >>> user-help@struts.apache.org
>> >>> >>>> >>>> >> >
>> >>> >>>> >>>> >> >
>> >>> >>>> >>>> >>
>> >>> >>>> >>>> >>
>> >>> >>>>
>> ---------------------------------------------------------------------
>> >>> >>>> >>>> >> To unsubscribe, e-mail:
>> user-unsubscribe@struts.apache.org
>> >>> >>>> >>>> >> For additional commands, e-mail:
>> user-help@struts.apache.org
>> >>> >>>> >>>> >>
>> >>> >>>> >>>> >>
>> >>> >>>> >>>> >
>> >>> >>>> >>>>
>> >>> >>>> >>>>
>> >>> >>>>
>> ---------------------------------------------------------------------
>> >>> >>>> >>>> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>> >>> >>>> >>>> For additional commands, e-mail: user-help@struts.apache.org
>> >>> >>>> >>>>
>> >>> >>>> >>>>
>> >>> >>>> >>>
>> >>> >>>> >>
>> >>> >>>> >
>> >>> >>>> >
>> >>> ---------------------------------------------------------------------
>> >>> >>>> > To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>> >>> >>>> > For additional commands, e-mail: user-help@struts.apache.org
>> >>> >>>> >
>> >>> >>>> >
>> >>> >>>> >
>> >>> >>>> >
>> >>> >>>> >
>> >>> >>>>
>> >>> >>>>
>> ---------------------------------------------------------------------
>> >>> >>>> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>> >>> >>>> For additional commands, e-mail: user-help@struts.apache.org
>> >>> >>>>
>> >>> >>>>
>> >>> >>>
>> >>> >>
>> >>> >
>> >>>
>> >>> ---------------------------------------------------------------------
>> >>> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>> >>> For additional commands, e-mail: user-help@struts.apache.org
>> >>>
>> >>>
>> >>
>> >
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>> For additional commands, e-mail: user-help@struts.apache.org
>>
>>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org