2014-12-16 37 views
5

Wie verwenden Sie Hazelcast als HTTP-Sitzungsspeicher mit integriertem Tomcat mit Spring Boot und Spring Security? Ich sehe, es gibt einen EmbeddedServletContainerCustomizer und SpringAwareWebFilter, aber ich verstehe nicht, wie man es benutzt.Spring Boot mit Hazelcast und Tomcat

Antwort

12

Als described in Hazelcast's documentation müssen Sie Hazelcasts SpringAwareWebFilter und SessionListener konfigurieren. Sie können also im Frühling Stiefel tun, indem Sie ein FilterRegistrationBean erklärt und ein ServletListenerRegistrationBean jeweils:

@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 und SessionListener sind beide in hazelcast-wm Moduls Hazelcast so dass Sie eine Abhängigkeit von com.hazelcast:hazelcast-wm zu Ihrem pom.xml oder build.gradle hinzufügen müssen. hazelcast-wm erfordert außerdem Spring Security, um auf dem Klassenpfad zu sein.

Nun, wenn Sie Ihre Anwendung ausführen, sollten Sie eine Ausgabe von Hazelcast während des Startvorgangs sehen melden Sie sich an, die folgend ähnlich ist:

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

Warum nicht verwendet Frühlings-Session? Es ist ziemlich einfach.

Anstatt Tomcat's HttpSession zu verwenden, behalten wir tatsächlich die Werte in Redis bei. Spring Session ersetzt die HttpSession durch eine Implementierung, die von Redis unterstützt wird. Wenn der SecurityContextPersistenceFilter von Spring Security den SecurityContext in der HttpSession speichert, wird er in Redis gespeichert.

@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

Verwandte Themen