यह इस बात पर निर्भर करता है कि आपने इसे कैसे कॉन्फ़िगर किया है (या कहें, आप एक अलग व्यवहार को कॉन्फ़िगर कर सकते हैं)।
वेब अनुप्रयोग में आप ThreadLocalSecurityContextHolderStrategy
का उपयोग करेंगे जो SecurityContextPersistenceFilter
के साथ इंटरैक्ट करता है।
जावा के साथ शुरू होता है SecurityContextPersistenceFilter
के डॉक्टर:
कॉन्फ़िगर किया गया से प्राप्त जानकारी के साथ {@link SecurityContextHolder} {भरता @link SecurityContextRepository} पहले अनुरोध और यह भंडार पीठ में करने के लिए अनुरोध के बाद भंडार संदर्भ धारक को पूरा और साफ़ कर रहा है। डिफ़ॉल्ट रूप से यह {@link HttpSessionSecurityContextRepository} का उपयोग करता है। जानकारी के लिए इस कक्षा को देखें HttpSession संबंधित कॉन्फ़िगरेशन विकल्प।
Btw:
HttpSessionSecurityContextRepository
HttpSession (कुंजी = "का उपयोग करता है: HttpSessionSecurityContextRepository SecurityContextRepository का ही कार्यान्वयन (मैं डिफ़ॉल्ट libs में पाया है) यह इस तरह काम करता है SPRING_SECURITY_CONTEXT ") SecurityContext
ऑब्जेक्ट को स्टोर करने के लिए।
SecurityContextPersistenceFilter
एक फ़िल्टर है जो SecurityContextRepository
का उपयोग करता है उदाहरण के लिए HttpSessionSecurityContextRepository
SecurityContext
ऑब्जेक्ट्स लोड और स्टोर करने के लिए। एक HttpRequest फिल्टर गुजरता है, फिल्टर रिपोजिटरी से SecurityContext
हो और SecurityContextHolder (SecurityContextHolder#setContext
) SecurityContextHolder
दो तरीकों setContext
और getContext
है में रख दें। सेट- और get-Context विधियों में वास्तव में क्या किया जाता है यह निर्दिष्ट करने के लिए दोनों SecurityContextHolderStrategy
का उपयोग करते हैं। - उदाहरण के लिए ThreadLocalSecurityContextHolderStrategy
संदर्भ को संग्रहीत करने के लिए एक थ्रेड स्थानीय का उपयोग करता है।
तो संक्षेप में: उपयोगकर्ता प्रिंसिपल (सुरक्षा कॉन्टेक्स्ट का तत्व) HTTP सत्र में संग्रहीत है। और प्रत्येक अनुरोध के लिए इसे एक थ्रेड स्थानीय में रखा जाता है जहां से आप इसे एक्सेस करते हैं।