Avatar billede vange_inet Nybegynder
18. marts 2003 - 15:29

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>
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester