Spring MVC, Spring Security és Tomcat: megváltoztatta a munkamenet azonosítóját és elvesztette a munkamenet adatait

szavazat
16

Az általam támogatott weboldalt a Spring MVC (4.2.9.RELEASE), a Spring Security (3.2.5.RELEASE), a JSP és a Hibernate (4.3.8.Final) segítségével fejlesztették ki. Az előlap egy terheléselosztó (Kemp LoadMaster 3000), és az oldal a Tomcat-en fut (8.5.54). Annak érdekében, hogy megtalálja a probléma okát, csak egy Tomcat példányt futok a terheléselosztó mögött, hogy egyszerűbb rendszert kapjak. A webhely minden oldala (nyilvános oldalak és a hitelesítés után látott oldalak) a HTTPS alatt fut.

A következő egyszerűsített kód bemutatja, hogyan lehet a problémát bemutatni:

@RequestMapping(value=/form, method = RequestMethod.GET)
public String surveyPageGet(HttpServletRequest request, 
    HttpServletResponse response,
    Model model, Map<String, Object> map) throws IOException {

    request.getSession().setAttribute(token, token-value);
    System.out.println(request.getSession().getId());

    return myform;
}

@RequestMapping(value=/form, method = RequestMethod.POST)
public String surveyPageGet(HttpServletRequest request, 
    HttpServletResponse response,
    Model model, Map<String, Object> map) throws IOException {

    System.out.println(request.getSession().getAttribute(token));
    System.out.println(request.getSession().getId());

    return redirect:/success;
}

A munkamenet időtúllépése a terheléselosztón 60 perc, állandó üzemmódja pedig

Super HTTP and Source IP

A munkamenet időkorlátja a Tomcat-on szintén 60 perc, a web.xml fájlban megadva

<session-config>
    <session-timeout>60</session-timeout>
    <tracking-mode>COOKIE</tracking-mode>
</session-config>

Az alábbiakban bemutatjuk a kapcsolódó beállítást a Spring Security programban.

<security:http auto-config=false use-expressions=true request-matcher=regex entry-point-ref=authenticationEntryPoint >
    <security:intercept-url pattern=^\/secure\/.*$ access=hasRole('ROLE_USER')  />
    <security:access-denied-handler ref=accessDeniedHandler />
    <security:logout invalidate-session=true logout-url=/secure/logout logout-success-url=/ delete-cookies=JSESSIONID />
    <security:custom-filter ref=authenticationFilter position=FORM_LOGIN_FILTER />  
    <security:anonymous username=guest granted-authority=ROLE_GUEST />
</security:http>

Itt vannak megfigyeléseim a munkamenet azonosítójáról és a munkamenet adatairól a POST módszernél. Az idők nagy százalékában a POST módszer ugyanazt a munkamenet-azonosítót és token értéket nyomtatja ki, ha a benyújtásra az űrlap megjelenését követő 60 percen belül kerül sor. Ez érthető. Amit nem értek, az esetek nagyon kis százalékában, amikor az űrlap benyújtása megtörténik a 60 perces korlátozás előtt, megváltozik a munkamenet azonosítója, és a token értéke nulla, vagy a munkamenet azonosítója ugyanaz marad, de a token értéke nulla .

Hogyan akadályozhatom meg a munkamenet azonosítójának megváltozását és a munkamenet adatainak elvesztését, ha a munkamenet nem jön el? Nagyon szükségem van erre, mert az oldal működik. Nagyon sok időt töltenek online egy lehetséges javítás érdekében, és sokféle tesztet elvégeztem (beleértve a kód hozzáadását, hogy kizárjam annak lehetőségét, hogy a problémát spam vagy támadás okozta), de nem sikerült.

Kérjük, bátran ossza meg, ha további információra van szüksége az oldalról.

A kérdést 07/06/2020 17:53
a forrás felhasználó
Más nyelveken...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more