【问题标题】:Spring security 3 Concurrent session control not working in tomcat clustered environmentSpring security 3并发会话控制在tomcat集群环境中不起作用
【发布时间】:2012-11-09 14:10:16
【问题描述】:

Spring security 的并发会话控制在 tomcat 7 集群环境中无法正常工作,但在非集群环境中可以正常工作。会话也在 tomcat 中复制。

集群配置:

<Cluster channelSendOptions="6" className="org.apache.catalina.ha.tcp.SimpleTcpCluster">
        <Manager className="org.apache.catalina.ha.session.DeltaManager" expireSessionsOnShutdown="false" notifyListenersOnReplication="true"/>
        <Channel className="org.apache.catalina.tribes.group.GroupChannel">
          <Membership address="228.0.0.9" className="org.apache.catalina.tribes.membership.McastService" dropTime="3000" frequency="500" port="45564"/>
          <Receiver address="auto" autoBind="100" className="org.apache.catalina.tribes.transport.nio.NioReceiver" maxThreads="6" port="5008" selectorTimeout="5000"/>
          <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
            <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
          </Sender>
          <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
          <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
        </Channel>
        <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=""/>
        <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
        <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer" deployDir="/tmp/war-deploy/" tempDir="/tmp/war-temp/" watchDir="/tmp/war-listen/" watchEnabled="false"/>
        <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
        <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
      </Cluster>

apache负载均衡配置:

ProxyPass / balancer://domain.foo.net/ lbmethod=byrequests stickysession=JSESSIONID|jsessionid nofailover=Off maxattempts=15
ProxyPreserveHost On
<Proxy balancer://domain.abcprocure.net>
    BalancerMember http://127.0.0.1:8888 max=250 min=45 keepalive=On route=tc02
    BalancerMember http://127.0.0.1:8080 max=250 min=45 keepalive=On route=tc01

</Proxy>

我们将不胜感激。

【问题讨论】:

    标签: apache spring-security tomcat7


    【解决方案1】:

    默认的 SessonRegistry 是一种内存实现,因此您将在每个 JVM 中拥有一个不同的实现,而不会察觉到其他的。

    您需要以在虚拟机之间共享数据的方式实现SessionRegistry 接口。这可以使用 SQL 数据库、memcached、redis 或任何最适合您的情况。

    编写完类后,reference manual 将展示如何使用显式 SessionRegistry bean 配置并发控制。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-18
      • 1970-01-01
      • 2018-03-18
      • 1970-01-01
      • 2020-10-26
      • 2022-06-20
      • 1970-01-01
      • 2015-06-25
      相关资源
      最近更新 更多