Hi again,

Let me correct the observation made here. Unlike another issue
I have been investigating, this concurrency issue does turn
up with IE for a simple JSP forward too. It is not specific
to the use of a Struts forward.

Vaughan.

> -----Original Message-----
> From: Vaughan Jackson [mailto:[EMAIL PROTECTED]]
> Sent: Friday, January 11, 2002 6:07 PM
> To: '[EMAIL PROTECTED]'
> Subject: Potential Concurrency Issue - Struts Forward/Frames/Internet
> Expl orer 6.0
> 
> 
> Hi,
> 
> We have been looking at the implementation of an out of order request
> detection mechanism very similar to the one built in to 
> Struts. For a single
> frame application, this works as follows, upon reception of a request:
> 
> 1. The action object extracts a token (if any) from the 
> session, and stores
> it as 
>   'the old token'.
> 2. The action object then generates a new token to identify 
> the current 
> request, and places this token in the session.
> 3. The action object compares the token it extracts from the 
> current request (if any) with 'the old token', that previously in the
> session.
> They should match. If they don't, then the current request is 
> classified 
> as an 'out of order' or duplicate request. The action object 
> can change 
> the request's action to something else, if it is thought that 
> duplicating
> the 
> action in question might be harmful.
> 4. The request is forwarded to the corresponding JSP page.
> 5. Code on the JSP page extracts the token from the session, 
> and makes it 
> the value of a hidden form field.
> 6. If the page and its form are subsequently submitted, the 
> token value will
> be 
> submitted as part of the request. The "loop" begins again 
> from step 1. The
> token
> submitted here in step 6 will be compared in step 3.
> 
> This seems to work well for detecting duplicate requests 
> resulting from the
> user hitting
> the reload/back or forward buttons on the browser.
> 
> Then we tried to apply the same approach to a framed application. The
> problem with 
> a framed application is that each user action can result in a 
> number of
> requests, 
> hence we can't assume that an in order request's token value 
> should match
> the 
> last one generated but one.
> 
> A colleague came up with a solution for this. Instead of just 
> getting the
> pages to submit
> whatever value they pick up from the session at time of 
> rendering, we get
> each page 
> to store the value extracted from the session at the time of 
> rendering in a
> JavaScript
> global variable, or one on the top level window. Then, at time of
> submission, the page
> picks up this value from the JavaScript, and submits this. 
> The rest of the
> process 
> should work as before. The important point here is that this 
> JavaScript
> variable is 
> shared by all requests, and thus, we effectively end up with one token
> identifying
> each user action, rather than one for each request. All of 
> the requests from
> a single
> user action should be submitted with the same token value.
> 
> This seemed to work fine in both Internet Explorer 6.0 and 
> Netscape 6.2.
> Then I 
> discovered one problem. In a particular test case, I would get the
> application to 
> carry out a Struts forward action to the page containing the frameset
> containing
> the pages in question. Then, I would invoke an action on one 
> of those pages
> to see
> whether the application thought such a request was a 
> duplicate or not. It
> should not.
> Generally it did not. However, about 1 in every 10 times, 
> with Internet
> Explorer only,
> the tokens would not match, and it would come up with a 
> "false positive". It
> would
> classify the first instance of a request as a duplicate.
> 
> Has anyone else seen this sort of behavior? It seems to be something
> peculiar to the combination of a Struts forward to a frameset 
> followed by 
> the action in question, when using IE only. Is is possible 
> that this is
> occuring
> due to some sort of race condition?
> 
> Any ideas welcome.
> Thanks,    
> Vaughan.
> ___________________________________________________
> Vaughan Jackson
> Development 
> Tumbleweed Communications
> [EMAIL PROTECTED] / +1 (650) 216 2532
> ___________________________________________________
> 
> 
> 
> --
> To unsubscribe, e-mail:   
> <mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail: 
> <mailto:[EMAIL PROTECTED]>
> 
> 


--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to