Struts - token
Hvordan sikrer man sig, at to tråde (dvs to identiske requests fra samme klient) ikke begge gennemfører Action?Som jeg ser nedenstående kode, kan to tråde nå at aflæse, at token er valid (1), og derefter resette token (2). Der bør vel være en metode, som både aflæser og resetter token? Man kan selvfølgelig selv lave den, men har jeg overset noget?
Jeg har følgende løsningsforslag:
- Selv lave synkronisering på session/token
- Pakke isTokenValid og reset ind i en metode, hvor der synkronisers på session
Begge løsningsforslag har et problem: hvad skal jeg synkronisere på? Jeg er ikke garanteret at request.getSession() returnerer det samme objekt hver gang - det kan være en facade, som bliver oprettet pr request.
Mit spørgsmål er: Har jeg overset en mekanisme i Struts, som gør, at jeg er garanteret at ét og kun ét request-token gennemfører min action?
<pre>
public final ActionForward perform(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
HttpSession session = request.getSession();
ActionForward forward = null;
1. if (isTokenValid(request)) {
// Reset token and session attributes
2. reset(request);
// Do something
}
return forward;
}
</pre>