2017-10-03 9 views
3

Nous avons configuré des ressorts en utilisant redis comme magasin de session. Avec une charge plus importante, les utilisateurs finissent par obtenir des données de session aléatoires.Springsession et redis mélangeant des sessions

Malheureusement, nous ne sommes pas en mesure de le reproduire à nouveau et il n'est pas reproductible dans un environnement de test.

Est-ce que quelqu'un a eu une expérience similaire et peut-être peut-être une direction vers quoi regarder?

+0

Nous avons rencontré un problème similaire dans notre application, avez-vous trouvé la cause/une solution? – Tim

Répondre

1

J'ai utilisé la session de printemps en utilisant Redis session store dans mon projet comme suit, cela fonctionne normalement, je le partage, j'espère que ça aide!

utilisé la version de démarrage de démarrage du printemps: 1.4.3

<dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-security</artifactId> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-configuration-processor</artifactId> 
     <optional>true</optional> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework.session</groupId> 
     <artifactId>spring-session</artifactId> 
    </dependency> 


    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-data-redis</artifactId> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-core</artifactId> 
     <version>4.2.0.RELEASE</version> 
    </dependency> 

    <dependency> 
     <groupId>biz.paluch.redis</groupId> 
     <artifactId>lettuce</artifactId> 
     <version>3.5.0.Final</version> 
    </dependency> 

printemps classe de configuration Redis session:

package az.com.cybernet.aas.config; 

import org.springframework.beans.factory.annotation.Value; 
import org.springframework.context.annotation.Bean; 
import org.springframework.data.redis.connection.lettuce. 
LettuceConnectionFactory; 
import org.springframework.session.data.redis.config.annotation.web.http. 
EnableRedisHt 
tpSession; 
import org.springframework.session.web.http.CookieHttpSessionStrategy; 
import org.springframework.session.web.http.CookieSerializer; 
import org.springframework.session.web.http.DefaultCookieSerializer; 
import org.springframework.session.web.http.HttpSessionStrategy; 



@EnableRedisHttpSession 
public class RedisConfig { 

@Value("${spring.redis.host}") 
private String hostname; 
@Value("${spring.redis.port}") 
private String port; 
// @Value("${spring.redis.password}") 
// private String password; 

@Bean 
public LettuceConnectionFactory connectionFactory() { 
    LettuceConnectionFactory connectionFactory = new LettuceConnectionFactory(); 
    connectionFactory.setHostName(hostname); 
    // connectionFactory.setPassword(password); 
    connectionFactory.setDatabase(2); 
    connectionFactory.setPort(Integer.parseInt(port)); 
    return connectionFactory; 
} 

@Bean 
public CookieSerializer cookieSerializer() { 
    DefaultCookieSerializer serializer = new DefaultCookieSerializer(); 
    serializer.setCookieName("JSESSIONID"); 
    serializer.setCookiePath("/"); 
    serializer.setDomainNamePattern("^.+?\\.(\\w+\\.[a-z]+)$"); 
    return serializer; 
} 

@Bean 
public HttpSessionStrategy strategy() { 
    CookieHttpSessionStrategy cookieHttpSessionStrategy = new CookieHttpSessionStrategy(); 

    cookieHttpSessionStrategy.setCookieSerializer(cookieSerializer()); 
    return cookieHttpSessionStrategy; 

} 

}