2015-04-29 9 views
6

कुछ वेब सेवाओं के लिए मैं सत्रों का उपयोग अक्षम करना चाहता हूं। मैं बनाने सत्र जोड़ा = "कभी नहीं" config करने के लिए:वसंत विकल्प बनाने-सत्र = कुछ परिदृश्यों में "कभी नहीं" अनदेखा किया जाता है?

<beans:bean id="http403EntryPoint" 
    class="org.springframework.security.web.authentication.Http403ForbiddenEntryPoint"/> 
<http use-expressions="true" entry-point-ref="http403EntryPoint" 
    create-session="never"> 
    <custom-filter ref="x509Filter" position="PRE_AUTH_FILTER"/> 
</http> 

यह ज्यादातर मामलों के लिए काम करता है, जब पूर्व प्रमाणीकृत उपयोगकर्ता क्लाइंट प्रमाणपत्र जो आवेदन में पंजीकृत नहीं है है को छोड़कर, इसलिए हमारे प्रमाणीकरणउसर DetailsServiceउपयोगकर्ता नाम नॉटफाउंड अपवाद फेंकता है। यदि उपयोगकर्ता के पास कोई प्रमाणपत्र नहीं है या कोई पंजीकृत प्रमाणपत्र है, तो कोई सत्र नहीं बनाया गया है (HTTP प्रतिक्रिया में कोई सेट-कुकी शीर्षलेख नहीं है)। वर्णित मामले में एक कुकी भेजी जाती है। यह (प्रत्येक क्रम में कुकी क्रमशः) प्रत्येक निम्न अनुरोध पर भी मूल्यांकन किया जाता है, भले ही क्लाइंट प्रमाणपत्र बदल दिया गया हो (मूल रूप से एक सत्र निर्धारण हमले की इजाजत देता है - ऐप प्रत्येक कॉल पर पुनः प्रमाणीकरण के बजाय सहेजे गए प्रमाणीकरण का उपयोग करता है)।

हम वसंत सुरक्षा 3.0.5 का उपयोग करते हैं। टॉमकैट 6 और 7 और जेबॉस 7.1.1 के साथ भी परीक्षण किया गया।

वर्णित परिदृश्य में एक सत्र क्यों बनाया गया है?

पुनश्च: सत्र निर्धारण समस्या शायद checkForPrincipalChanges AbstractPreAuthenticatedProcessingFilter में की स्थापना करके workarounded किया जा सकता है, लेकिन मैं क्यों एक सत्र में सभी बनाई गई है का जवाब में दिलचस्पी है।

उत्तर

3

अपराधी था https://jira.spring.io/browse/SEC-1476:

अनाधिकृत उपयोग के मामले में वर्ग में निम्न विधि AbstractPreAuthenticatedProcessingFilter एक सत्र बनाने और वहाँ अपवाद संग्रहीत करेंगे:

protected void unsuccessfulAuthentication(HttpServletRequest request, HttpServletResponse response, AuthenticationException failed) { 
    SecurityContextHolder.clearContext(); 

    if (logger.isDebugEnabled()) { 
     logger.debug("Cleared security context due to exception", failed); 
    } 
    request.getSession().setAttribute(WebAttributes.AUTHENTICATION_EXCEPTION, failed); 
} 

ठीक में वे पिछले बदल लाइन, उन्होंने getSession() कॉल को हटा दिया ताकि अनुरोध में प्रमाणीकरण अपवाद संग्रहित हो।

हमारी परियोजना को ठीक करने के लिए मैं एक नया वर्ग है कि X509AuthenticationFilter फैली बनाया है और वहाँ मैं विधि overrode unsuccessfulAuthentication एक ही सामग्री के साथ छोड़कर मैं भी getSession() कॉल हटा दिया।

संबंधित मुद्दे

 संबंधित मुद्दे