Alıştırma - REDIS'te HTTP oturum verilerini depolama

Tamamlandı

Bu ünitede, HTTP oturum verilerini Redis için Azure Cache depolamak için mevcut Spring Boot uygulamanıza Spring Session ekleyin.

Spring Oturumlarını Yapılandırma

  1. Uygulamanıza Spring Session desteği eklemek için pom.xml dosyanızın bölümüne aşağıdaki bağımlılığı <dependencies> ekleyin:

    <dependency>
        <groupId>org.springframework.session</groupId>
        <artifactId>spring-session-data-redis</artifactId>
    </dependency>
    
  2. Spring Session'ı oturum çoğaltması için Redis kullanacak şekilde yapılandırmak için src/main/resources/application.properties dosyasına aşağıdaki satırı ekleyin:

    spring.session.store-type=redis
    

Oturum çoğaltmasını test etmek için yeni denetleyici ekleme

Oturum çoğaltmasını test etmek için kullanmak üzere uygulamanıza yeni bir Spring MVC REST denetleyicisi ekleyin.

  1. TodoController'ın yanında SessionReplicationController adlı yeni bir denetleyici oluşturun.

    package com.example.demo;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.session.data.redis.config.ConfigureRedisAction;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import javax.servlet.http.HttpSession;
    
    @RestController
    @RequestMapping("/")
    public class SessionReplicationController {
    
        @Bean
        public static ConfigureRedisAction configureRedisAction() {
            return ConfigureRedisAction.NO_OP;
        }
    
        @GetMapping("/session")
        public String session(HttpSession session) {
            Integer test = (Integer) session.getAttribute("test");
            if (test == null) {
                test = 0;
            } else {
                test++;
            }
            session.setAttribute("test", test);
            return "[" + session.getId() + "]-" + test;
        }
    }
    

    Dekont

    Varsayılan olarak Spring Session, güvenli Redis için Azure Cache örneklerde çalışmayan Redis anahtar alanı bildirimlerini ayarlamaya çalıştığından, belirli ConfigureRedisAction.NO_OP bir Spring çekirdeğini yapılandırırsınız. Redis için Azure Cache için anahtar alanı bildirimlerine ihtiyacınız varsa bunları Redis CLI aracılığıyla el ile uygulamanız gerekir.

    Keyspace bildirimleri WebSockets için kullanışlıdır, ancak daha fazla kaynak kullanır. Geçerli senaryo WebSockets kullanmaz ve anahtar alanı bildirimlerini etkinleştirmemelidir.

  2. HTTP oturumu çoğaltmasından yararlanmak için uygulamanızı yeniden başlatın.

Oturum çoğaltmayı test et

HTTP oturumları kullanıcıya özgü olup bir tanımlama bilgisi aracılığıyla korunur. Oturumların düzgün çalışıp çalışmadığını test etmek için aşağıdaki yöntemlerden birini kullanabilirsiniz:

  • Tarayıcınızın üzerine gelin http://localhost:8080/session ve sayfayı birkaç kez yeniden yükleyin.

  • Aşağıdaki komut satırını birkaç kez çalıştırın:

    curl -b cookie.txt -c cookie.txt http://127.0.0.1:8080/session
    

    Yukarıdaki komut, tanımlama bilginizi cookie.txt adlı bir dosyaya kaydeder.

Her iki yöntem de aşağıdaki örnekte gösterildiği gibi HTTP oturum kimliğinizi her istek sonrasında artan bir sayıyla görüntüleyen bir çıkış üretir:

Screenshot that shows example output for session replication.

Oturumların doğru kalıcı olup olmadığını denetlemek için sunucunuzu yeniden başlatın ve oturum verilerinizin kaybolmadığını doğrulayın.

Sonraki ünitede uygulamanızı buluta dağıtacak ve yerel makinenizle bulut hizmeti arasında HTTP oturumlarını kümeleyeceksiniz.