2014-12-16 55 views
5

Come si usa Hazelcast come archivio di sessioni http con Tomcat incorporato con Spring Boot e Spring Security? Vedo che c'è un EmbeddedServletContainerCustomizer e SpringAwareWebFilter ma non capisco come usarlo.Avvio a molla con Hazelcast e Tomcat

risposta

12

Come described in Hazelcast's documentation, è necessario configurare Hazelcast SpringAwareWebFilter e SessionListener. È possibile farlo in primavera Boot dichiarando un FilterRegistrationBean e un ServletListenerRegistrationBean rispettivamente:

@Bean 
public FilterRegistrationBean hazelcastFilter() { 
    FilterRegistrationBean registration = new FilterRegistrationBean(new SpringAwareWebFilter()); 

    registration.addUrlPatterns("/*"); 
    registration.setDispatcherTypes(DispatcherType.REQUEST, DispatcherType.FORWARD, DispatcherType.INCLUDE); 

    // Configure init parameters as appropriate: 
    // registration.addInitParameter("foo", "bar"); 

    return registration; 
} 

@Bean 
public ServletListenerRegistrationBean<SessionListener> hazelcastSessionListener() { 
    return new ServletListenerRegistrationBean<SessionListener>(new SessionListener()); 
} 

SpringAwareWebFilter e SessionListener sono entrambi nel modulo di Hazelcast hazelcast-wm quindi è necessario aggiungere una dipendenza com.hazelcast:hazelcast-wm al pom.xml o build.gradle. hazelcast-wm richiede inoltre che Spring Security si trovi sul classpath.

Ora, quando si esegue l'applicazione, si dovrebbe vedere il log in uscita da Hazelcast durante l'avvio che è simile al seguente:

2014-12-17 10:29:32.401 INFO 94332 --- [ost-startStop-1] com.hazelcast.config.XmlConfigLocator : Loading 'hazelcast-default.xml' from classpath. 
2014-12-17 10:29:32.435 INFO 94332 --- [ost-startStop-1] c.hazelcast.web.HazelcastInstanceLoader : Creating a new HazelcastInstance for session replication 
2014-12-17 10:29:32.582 INFO 94332 --- [ost-startStop-1] c.h.instance.DefaultAddressPicker  : [LOCAL] [dev] [3.3.3] Prefer IPv4 stack is true. 
2014-12-17 10:29:32.590 INFO 94332 --- [ost-startStop-1] c.h.instance.DefaultAddressPicker  : [LOCAL] [dev] [3.3.3] Picked Address[169.254.144.237]:5701, using socket ServerSocket[addr=/0:0:0:0:0:0:0:0,localport=5701], bind any local is true 
2014-12-17 10:29:32.612 INFO 94332 --- [ost-startStop-1] c.h.spi.impl.BasicOperationScheduler  : [169.254.144.237]:5701 [dev] [3.3.3] Starting with 16 generic operation threads and 16 partition operation threads. 
2014-12-17 10:29:32.657 INFO 94332 --- [ost-startStop-1] com.hazelcast.system      : [169.254.144.237]:5701 [dev] [3.3.3] Hazelcast 3.3.3 (20141112 - eadb69c) starting at Address[169.254.144.237]:5701 
2014-12-17 10:29:32.657 INFO 94332 --- [ost-startStop-1] com.hazelcast.system      : [169.254.144.237]:5701 [dev] [3.3.3] Copyright (C) 2008-2014 Hazelcast.com 
2014-12-17 10:29:32.661 INFO 94332 --- [ost-startStop-1] com.hazelcast.instance.Node    : [169.254.144.237]:5701 [dev] [3.3.3] Creating MulticastJoiner 
2014-12-17 10:29:32.664 INFO 94332 --- [ost-startStop-1] com.hazelcast.core.LifecycleService  : [169.254.144.237]:5701 [dev] [3.3.3] Address[169.254.144.237]:5701 is STARTING 
2014-12-17 10:29:38.482 INFO 94332 --- [ost-startStop-1] com.hazelcast.cluster.MulticastJoiner : [169.254.144.237]:5701 [dev] [3.3.3] 


Members [1] { 
    Member [169.254.144.237]:5701 this 
} 

2014-12-17 10:29:38.503 INFO 94332 --- [ost-startStop-1] com.hazelcast.core.LifecycleService  : [169.254.144.237]:5701 [dev] [3.3.3] Address[169.254.144.237]:5701 is STARTED 
-1

Perché non usi Primavera-sessione? È abbastanza facile

Invece di utilizzare HttpSession di Tomcat, stiamo effettivamente persistendo i valori in Redis. Spring Session sostituisce HttpSession con un'implementazione supportata da Redis. Quando SecurityContextPersistenceFilter di Spring Security salva SecurityContext su HttpSession, viene quindi mantenuto in Redis.

@EnableRedisHttpSession 
public class HttpSessionConfig { 
} 


#src/main/resources/application.properties 
spring.redis.host=localhost 
spring.redis.password=secret 
spring.redis.port=6379 

http://docs.spring.io/spring-session/docs/current/reference/html5/guides/boot.html

Problemi correlati