MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

MongoDB के साथ वसंत सत्र

1. अवलोकन

इस त्वरित ट्यूटोरियल में, हम यह पता लगाएंगे कि स्प्रिंग बूट के साथ और उसके बिना, MongoDB के साथ समर्थित स्प्रिंग सेशन का उपयोग कैसे करें।

स्प्रिंग सत्र को अन्य स्टोर जैसे रेडिस और जेडीबीसी के साथ भी समर्थित किया जा सकता है।

2. स्प्रिंग बूट विन्यास

सबसे पहले, आइए स्प्रिंग बूट के लिए आवश्यक निर्भरता और कॉन्फ़िगरेशन को देखें। आरंभ करने के लिए, आइए spring-session-data-mongodb के नवीनतम संस्करण जोड़ें और स्प्रिंग-बूट-स्टार्टर-डेटा-मोंगोडब हमारे प्रोजेक्ट के लिए:

<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-data-mongodb</artifactId>
    <version>2.2.6.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
    <version>2.2.6.RELEASE</version>
</dependency>

उसके बाद, स्प्रिंग बूट ऑटो-कॉन्फ़िगरेशन को सक्षम करने के लिए, हमें स्प्रिंग सेशन स्टोर-प्रकार को mongodb के रूप में जोड़ना होगा application.properties . में :

spring.session.store-type=mongodb

3. स्प्रिंग बूट के बिना स्प्रिंग कॉन्फ़िगरेशन

अब, स्प्रिंग बूट के बिना MongoDB में स्प्रिंग सत्र को संग्रहीत करने के लिए आवश्यक निर्भरता और कॉन्फ़िगरेशन पर एक नज़र डालते हैं।

स्प्रिंग बूट कॉन्फ़िगरेशन के समान, हमें स्प्रिंग-सेशन-डेटा-मोंगोडब की आवश्यकता होगी निर्भरता। हालांकि, यहां हम स्प्रिंग-डेटा-मोंगोडब . का उपयोग करेंगे हमारे MongoDB डेटाबेस तक पहुँचने की निर्भरता:

<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-data-mongodb</artifactId>
    <version>2.2.6.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-mongodb</artifactId>
    <version>2.2.6.RELEASE</version>
</dependency>

अंत में, आइए देखें कि एप्लिकेशन को कैसे कॉन्फ़िगर करें:

@EnableMongoHttpSession
public class HttpSessionConfig {

    @Bean
    public JdkMongoSessionConverter jdkMongoSessionConverter() {
        return new JdkMongoSessionConverter(Duration.ofMinutes(30));
    }
}

@EnableMongoHttpSession एनोटेशन सत्र डेटा को MongoDB में संग्रहीत करने के लिए आवश्यक कॉन्फ़िगरेशन को सक्षम करता है

साथ ही, ध्यान दें कि JdkMongoSessionConverter सत्र डेटा को क्रमबद्ध और अक्रमांकन करने के लिए जिम्मेदार है।

4. उदाहरण आवेदन

आइए कॉन्फ़िगरेशन का परीक्षण करने के लिए एक एप्लिकेशन बनाएं। हम स्प्रिंग बूट का उपयोग करेंगे, क्योंकि यह तेज़ है और इसके लिए कम कॉन्फ़िगरेशन की आवश्यकता है।

हम अनुरोधों को संभालने के लिए नियंत्रक बनाकर शुरू करेंगे:

@RestController
public class SpringSessionMongoDBController {

    @GetMapping("/")
    public ResponseEntity<Integer> count(HttpSession session) {

        Integer counter = (Integer) session.getAttribute("count");

        if (counter == null) {
            counter = 1;
        } else {
            counter++;
        }

        session.setAttribute("count", counter);

        return ResponseEntity.ok(counter);
    }
}

जैसा कि हम इस उदाहरण में देख सकते हैं, हम काउंटर . को बढ़ा रहे हैं समापन बिंदु पर प्रत्येक हिट पर और गिनती . नामक सत्र विशेषता में अपना मान संग्रहीत करना ।

5. एप्लिकेशन का परीक्षण

आइए यह देखने के लिए एप्लिकेशन का परीक्षण करें कि क्या हम वास्तव में MongoDB में सत्र डेटा संग्रहीत करने में सक्षम हैं।

ऐसा करने के लिए, हम समापन बिंदु तक पहुंचेंगे और हमें प्राप्त होने वाली कुकी का निरीक्षण करेंगे। इसमें एक सत्र आईडी होगा।

उसके बाद, हम सत्र आईडी का उपयोग करके सत्र डेटा लाने के लिए MongoDB संग्रह को क्वेरी करेंगे:

@Test
public void 
  givenEndpointIsCalledTwiceAndResponseIsReturned_whenMongoDBIsQueriedForCount_thenCountMustBeSame() {
    
    HttpEntity<String> response = restTemplate
      .exchange("http://localhost:" + 8080, HttpMethod.GET, null, String.class);
    HttpHeaders headers = response.getHeaders();
    String set_cookie = headers.getFirst(HttpHeaders.SET_COOKIE);

    Assert.assertEquals(response.getBody(),
      repository.findById(getSessionId(set_cookie)).getAttribute("count").toString());
}

private String getSessionId(String cookie) {
    return new String(Base64.getDecoder().decode(cookie.split(";")[0].split("=")[1]));
}

6. यह कैसे काम करता है?

आइए एक नज़र डालते हैं कि वसंत सत्र में पर्दे के पीछे क्या होता है।

SessionRepositoryFilter अधिकांश कार्यों के लिए जिम्मेदार है:

  • HttpSession को रूपांतरित करता है एक MongoSession . में
  • जांचता है कि क्या कोई कुकी है मौजूद है, और अगर ऐसा है, तो स्टोर से सत्र डेटा लोड करता है
  • अपडेट किए गए सत्र डेटा को स्टोर में सहेजता है
  • सत्र की वैधता की जांच करता है

साथ ही, SessionRepositoryFilter सत्र . नाम से एक कुकी बनाता है वह HttpOnly और सुरक्षित है। इस कुकी में सत्र आईडी है, जो एक बेस 64-एन्कोडेड मान है।

कुकी नाम या गुणों को अनुकूलित करने के लिए, हमें DefaultCookieSerializer प्रकार का स्प्रिंग बीन बनाना होगा।

उदाहरण के लिए, यहां हम httponly . को अक्षम कर रहे हैं कुकी की संपत्ति:

@Bean
public DefaultCookieSerializer customCookieSerializer(){
    DefaultCookieSerializer cookieSerializer = new DefaultCookieSerializer();
        
    cookieSerializer.setUseHttpOnlyCookie(false);
        
    return cookieSerializer;
}

7. सत्र विवरण MongoDB में संग्रहीत है

आइए हमारे MongoDB कंसोल में निम्न कमांड का उपयोग करके हमारे सत्र संग्रह को क्वेरी करें:

db.sessions.findOne()

परिणामस्वरूप, हमें निम्न के समान एक BSON दस्तावेज़ प्राप्त होगा:

{
    "_id" : "5d985be4-217c-472c-ae02-d6fca454662b",
    "created" : ISODate("2019-05-14T16:45:41.021Z"),
    "accessed" : ISODate("2019-05-14T17:18:59.118Z"),
    "interval" : "PT30M",
    "principal" : null,
    "expireAt" : ISODate("2019-05-14T17:48:59.118Z"),
    "attr" : BinData(0,"rO0ABXNyABFqYXZhLnV0aWwuSGFzaE1hcAUH2sHDFmDRAwACRgAKbG9hZEZhY3RvckkACXRocmVzaG9sZHhwP0AAAAAAAAx3CAAAABAAAAABdAAFY291bnRzcgARamF2YS5sYW5nLkludGVnZXIS4qCk94GHOAIAAUkABXZhbHVleHIAEGphdmEubGFuZy5OdW1iZXKGrJUdC5TgiwIAAHhwAAAAC3g=")
}

_id एक यूयूआईडी है जो DefaultCookieSerializer . द्वारा बेस64-एन्कोडेड होगा और सत्र . में मान के रूप में सेट करें कुकी साथ ही, ध्यान दें कि attr विशेषता में हमारे काउंटर का वास्तविक मूल्य होता है।


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. उबंटू से मोंगोडीबी को अनइंस्टॉल करें

  2. मोंगोडीबी $strcasecmp

  3. FindOneAndUpdate विधि से अद्यतन दस्तावेज़ वापस कैसे प्राप्त करें?

  4. गलत URI के कारण MongoDB से कनेक्ट नहीं हो सकता

  5. मोंगोडब में एकल दस्तावेज़ का आकार कैसे प्राप्त करें?