Spring MVC, Spring Security ve Tomcat: oturum kimliği değişti ve oturum verileri kaybedildi

oy
16

Desteklediğim web sitesi Spring MVC (4.2.9.RELEASE), Spring Security (3.2.5.RELEASE), JSP ve Hibernate (4.3.8.Final) ile geliştirildi. Ön uç bir yük dengeleyicidir (Kemp LoadMaster 3000) ve site Tomcat (8.5.54) üzerinde çalışır. Bu sorunun nedenini bulmak için, daha basit bir sisteme sahip olmak için yük dengeleyicinin arkasında yalnızca bir Tomcat örneği çalıştırıyorum. Sitedeki her sayfa (genel sayfalar ve kimlik doğrulamasından sonra görülen sayfalar) HTTPS altında çalışır.

Aşağıdaki basitleştirilmiş kod, sorunun nasıl gösterileceğini gösterir:

@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;
}

Yük dengeleyicideki oturum zaman aşımı 60 dakikadır ve kalıcı modu

Super HTTP and Source IP

Tomcat'teki oturum zaman aşımı da web.xml dosyasında 60 dakikadır

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

Aşağıda, Spring Security'deki ilgili kurulum yer almaktadır.

<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>

POST yöntemindeki oturum kimliği ve oturum verileri hakkındaki gözlemlerim. Çoğunlukla yüzde olarak, gönderim formu görüntülendikten sonra 60 dakika içinde gerçekleşirse POST yöntemi aynı oturum kimliğini ve simge değerini yazdırır. Bu anlaşılabilir. Anlamadığım şey, form gönderiminin 60 dakikalık sınırdan önce gerçekleştiği vakaların çok küçük bir yüzdesi için, oturum kimliği değişir VE jeton değeri null veya oturum kimliği aynı kalır, ancak jeton değeri null .

Bir oturum zaman aşımına uğramazsa oturum kimliğinin değişmesini ve oturum verilerinin kaybolmasını nasıl önleyebilirim? Gerçekten sitenin çalışması nedeniyle buna ihtiyacım var. Olası bir düzeltme için çok fazla zaman harcadım ve çok sayıda ve çeşitli testler yaptım (sorunun spam veya saldırıdan kaynaklanma olasılığını dışlamak için kod eklemek dahil), ancak başarı yok.

Site hakkında daha fazla bilgiye ihtiyacınız olursa lütfen bize bildirmekten çekinmeyin.

Oluştur 07/06/2020 saat 17:53
kaynak kullanıcı
Diğer dillerde...                            

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