Spring Boot с Hazelcast и Tomcat

Как вы используете Hazelcast в качестве хранилища сеансов http со встроенным Tomcat с Spring Boot и Spring Security? Я вижу, что есть EmbeddedServletContainerCustomizer и SpringAwareWebFilter, но я не понимаю, как их использовать.


person lammy    schedule 16.12.2014    source источник


Ответы (2)


Как описано в документации Hazelcast, вам необходимо настроить SpringAwareWebFilter и SessionListener Hazelcast. Вы можете сделать это в Spring Boot, объявив FilterRegistrationBean и ServletListenerRegistrationBean соответственно:

@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 и SessionListener находятся в модуле hazelcast-wm Hazelcast, поэтому вам нужно добавить зависимость от com.hazelcast:hazelcast-wm к вашему pom.xml или build.gradle. hazelcast-wm также требует, чтобы Spring Security находился в пути к классам.

Теперь, когда вы запускаете свое приложение, вы должны увидеть выходные данные журнала Hazelcast во время запуска, похожие на следующие:

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
person Andy Wilkinson    schedule 17.12.2014

Почему не использует Spring-сессию? Это довольно легко.

Вместо использования HttpSession Tomcat мы фактически сохраняем значения в Redis. Spring Session заменяет HttpSession реализацией, поддерживаемой Redis. Когда Spring Security SecurityContextPersistenceFilter сохраняет SecurityContext в HttpSession, он затем сохраняется в 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

person Muhammad Hewedy    schedule 16.01.2017