2015-01-27 1 views
0

Я использую Hazelcast 3.4 с Spring security 3.2.5. Когда я развертываю приложение и пытаюсь войти в систему, вход успешно завершен, но генерируется исключение, что приводит к ошибке страницы. Независимо от страницы с ошибкой я вошел в систему, и моя сессия «живая». Но после каждого входа я всегда получаю выполнение и, как результат, землю на странице ошибки (которую я установил, чтобы появиться в случае необработанного исключения).Hazelcast не работает с Spring security (нет компонента SessionRegistry)

Мои Hazelcast конфигурации в web.xml:

 <filter> 
    <filter-name>hazelcast-filter</filter-name> 
    <filter-class>com.hazelcast.web.spring.SpringAwareWebFilter</filter-class> 
    <init-param> 
     <param-name>map-name</param-name> 
     <param-value>at-sessions</param-value> 
    </init-param> 

    <init-param> 
     <param-name>sticky-session</param-name> 
     <param-value>true</param-value> 
    </init-param> 
    <init-param> 
     <param-name>cookie-name</param-name> 
     <param-value>hsessionId</param-value> 
    </init-param> 
    <init-param> 
     <param-name>cookie-http-only</param-name> 
     <param-value>true</param-value> 
    </init-param> 
    <init-param> 
     <param-name>instance-name</param-name> 
     <param-value>hazelcastInstance</param-value> 
    </init-param> 
    <init-param> 
     <param-name>shutdown-on-destroy</param-name> 
     <param-value>false</param-value> 
    </init-param> 
</filter> 

<listener> 
    <listener-class>com.hazelcast.web.SessionListener</listener-class> 
</listener> 


<filter-mapping> 
    <filter-name>hazelcast-filter</filter-name> 
    <url-pattern>/*</url-pattern> 
    <dispatcher>FORWARD</dispatcher> 
    <dispatcher>INCLUDE</dispatcher> 
    <dispatcher>REQUEST</dispatcher> 
</filter-mapping> 

Мой hazelcast конфигурации в контексте Spring XML:

<hz:hazelcast id="hazelcastInstance"> 
    <hz:config> 
     <hz:instance-name>hazelcastInstance</hz:instance-name> 
     <hz:group name="${hazelcast.group.name}" password="${hazelcast.group.password}"/> 
     <hz:properties> 
      <hz:property name="hazelcast.jmx">true</hz:property> 
      <hz:property name="hazelcast.logging.type">slf4j</hz:property> 
     </hz:properties> 
     <hz:network port="${hazelcast.port}"> 
      <hz:join> 
       <hz:multicast enabled="false"/> 
       <hz:tcp-ip enabled="${hazelcast.tcp.ip.enabled}"> 
        <hz:members>${hazelcast.tcp.ip.members}</hz:members> 
       </hz:tcp-ip> 
       <hz:aws enabled="${hazelcast.aws.enabled}" 
        access-key="${hazelcast.aws.access.key}" 
        secret-key="${hazelcast.aws.secret.key}" 
        region="${hazelcast.aws.region}" 
        tag-key="${hazelcast.aws.tag.key}" 
        tag-value="${hazelcast.aws.tag.value}" 
       /> 
      </hz:join> 
     </hz:network> 
     <hz:map name="at-sessions" 
      in-memory-format="${hazelcast.sessions.in.memory.format}" 
      backup-count="${hazelcast.sessions.backup.count}" 
      async-backup-count="${hazelcast.sessions.async.backup.count}" 
      time-to-live-seconds="${hazelcast.sessions.ttl.seconds}" 
      max-idle-seconds="${hazelcast.sessions.max.idle.seconds}" 
      eviction-policy="LRU" 
      max-size-policy="USED_HEAP_PERCENTAGE" 
      max-size="${hazelcast.sessions.max.size}" 
      eviction-percentage="${hazelcast.sessions.eviction.percentage}" 
      merge-policy="${hazelcast.sessions.merge.policy}" 
     /> 
    </hz:config> 

</hz:hazelcast> 

я получаю следующее исключение:

Caused by: javax.servlet.ServletException: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.security.core.session.SessionRegistry] is defined 
    at org.apache.jsp.WEB_002dINF.views.common.general_002derror_jsp._jspService(general_002derror_jsp.java:195) ~[na:na] 
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) ~[jasper.jar:7.0.57] 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) [servlet-api.jar:na] 
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432) ~[jasper.jar:7.0.57] 
    ... 97 common frames omitted 

Без Hazelcast логин работает полностью нормально. Любая помощь будет принята с благодарностью.

ответ

0

Кажется, что все в порядке. Вы настроили все параметры.

HazelCast Documentation

Вы не самые распространенные ошибки в этой конфигурации, является использование com.hazelcast.web.Webfilter, вместо com.hazelcast.web.SpringAwareWebFilter в фильтре определение.

Кроме того, вы можете проверить, выполнено ли ваше определение bean-компонента sessionRegistry таким образом.

<beans:property name="sessionRegistry" ref="sessionRegistry"/> 

В любом случае, вы могли бы взглянуть на образцы Hazelcast кода для сравнения шаг за шагом всю свою конфигурацию.

HazelCast Code Samples

Я надеюсь, что это полезно для вас. С уважением.

1

У меня такая же проблема. Причина в том, что я использую Spring Java Config для Spring Security, используя DSL. Используя текущую Spring Security 4.0.1, Configurer создаст SessionRegistry только по требованию и (как он выглядит) не как зарегистрированный компонент компонента.

Я исправил это с явным определением SessionRegistry.

http 
     .sessionManagement() 
      .sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED) 
      .sessionFixation() 
       .migrateSession() 
       .maximumSessions(10) 
       .sessionRegistry(sessionRegistry()) // << this here! 
       .and() 
      .and() 

и

@Bean 
public SessionRegistry sessionRegistry() { 
    return new SessionRegistryImpl(); 
} 

Если Hazelcast-х WebFilter не используется, это не требуется, так как в Spring SessionManagementConfigurer обеспечит будет создан экземпляр SessionRegistry. Но его нельзя найти, используя тип SessionRegistry ...

0

При использовании конфигурации XML для контекста ярового, убедитесь, чтобы определить

<bean id="sessionRegistry" 
    class="org.springframework.security.core.session.SessionRegistryImpl" /> 

в spring-security.xml (или любой файл, который используется для настройки контекста пружинной безопасности)

Смежные вопросы