Are you using a "jvmRoute" setting on your BalancerMember definition in 
mod_proxy config and on the <Engine/> element in server.xml? Your cookie would 
have the jvmRoute property added to the end of it (e.g. ALONGMD5HASH.server1) 
if so.

From the Almighty Google: http://community.jboss.org/wiki/usingmodproxywithjboss

Jon Brisbin
Portal Webmaster
NPC International, Inc.



On Jun 22, 2010, at 3:48 PM, Okubo, Yasushi (TSD) wrote:

> Hi
> 
> I downloaded apache apache v2.2.15 and compiled and installed, but the
> result was the same.
> 
> Session sso replication looked like failed.  Upon shutting down the
> node, it kicked me out of password protected area and needed to re-loin
> on the second node.
> 
> On apache, I installed/enabled all modules including basic
> authentication etc.  Is there any requirement on apache side or how the
> virtual host should be set up in httpd.conf to make sso failover work?
> 
> Thanks,
> yasushi
> 
> -----Original Message-----
> From: Pid [mailto:p...@pidster.com] 
> Sent: Tuesday, June 22, 2010 8:04 AM
> To: Tomcat Users List
> Subject: Re: question for sso session replication in tomcat 6.0.26
> 
> On 22/06/2010 15:56, Okubo, Yasushi (TSD) wrote:
>> Hi Andrew
>> 
>> In case of no failover, SSO works for all web applications on the same
> host.  Upon failover [shutting down one node], a user is routed to the
> other node, and TC is asking for a user to re-login when he/she tried to
> access password protected area.  
>> 
>> I have checked many times on server.xml and session replication is
> working fine upon failover, so I cannot think any misconfiguration on
> server.xml
>> The issue is SSO failover is not working.  I think it might be related
> to my apache virtual host setup, but could not figure it out.
>> 
>> Thanks for your help,
>> yasushi
>> 
>> I am using mod_proxy_ajp, mod_proxy_balancer [v2.2.3]
> 
> mod_proxy_ajp appeared in 2.2.3 for the first time, it was functional
> but not perfect & there are many bugfixes and improvements since then,
> you should upgrade HTTPD.
> 
> 
> p
> 
>> OS : Redhat Linux 64bit  RHEL v5.5
>> JDK : 1.6.0.20 
>> 
>> === I created virtual host on port 9050 ==
>> Httpd.conf
>> 
>> <VirtualHost 10.250.200.57:9050>
>> ServerAdmin xyz
>> ServerName webclust1.xyz.com
>> ServerAlias webclust1
>> ErrorLog logs/webclust_cluster_error.log
>> CustomLog logs/webclust-cluster-access_log common
>> 
>> <Location /balancer-manager>
>> SetHandler balancer-manager
>> 
>> Order Deny,Allow
>> Deny from all
>> Allow from all
>> </Location>
>> 
>> ProxyRequests off
>> <Proxy balancer://webclust>
>> BalancerMember ajp://10.250.200.57:9001 loadfactor=10 max=150 smax=145
> route=jvm1
>> BalancerMember ajp://10.250.200.57:9002 loadfactor=10 max=150 smax=145
> route=jvm2
>> BalancerMember ajp://10.250.200.57:9003 loadfactor=10 max=150 smax=145
> route=jvm3
>> Order Deny,Allow
>> Allow from all
>> </Proxy>
>> 
>> #Do not proxy balancer-manager
>> ProxyPass /balancer-manager !
>> 
>> <Location /examples>
>> ProxyPass balancer://webclust/examples
> stickysession=JSESSIONID|jsessionid
>> ProxyPassReverse balancer://webclust/examples
>> Order Deny,Allow
>> Allow from all
>> </Location>
>> 
>> <Location / >
>> ProxyPass balancer://webclust/ stickysession=JSESSIONID|jsessionid
>> ProxyPassReverse balancer://webclust/
>> Order Deny,Allow
>> Allow from all
>> </Location>
>> 
>> 
>> === server.xml ===
>>    <!-- Define an AJP 1.3 Connector on port 8009 -->
>>    <Connector port="9002" protocol="AJP/1.3" redirectPort="8443" />
>> 
>> <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
>> 
>> <Host name="localhost"  appBase="webapps"
>>            unpackWARs="true" autoDeploy="true"
>>            xmlValidation="false" xmlNamespaceAware="false">
>> 
>>        <Cluster
> className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
>>                 channelSendOptions="4">
>> 
>>          <Manager
> className="org.apache.catalina.ha.session.DeltaManager"
>>                           name="node2"
>>                   expireSessionsOnShutdown="false"
>>                   notifyListenersOnReplication="true"/>
>> 
>>          <Channel
> className="org.apache.catalina.tribes.group.GroupChannel">
>>            <Membership
> className="org.apache.catalina.tribes.membership.McastService"
>>                        address="228.0.0.5"
>>                        port="45564"
>>                        frequency="500"
>>                        dropTime="3000"/>
>>            <Receiver
> className="org.apache.catalina.tribes.transport.nio.NioReceiver"
>>                      address="auto"
>>                      port="4020"
>>                      autoBind="100"
>>                      selectorTimeout="5000"
>>                      maxThreads="12"/>
>> <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.TcpFailureDetec
> tor"/>
>>            <Interceptor
> className="org.apache.catalina.tribes.group.interceptors.MessageDispatch
> 15Interceptor"/>
>>                <Interceptor
> className="org.apache.catalina.tribes.group.interceptors.ThroughputInter
> ceptor"/>
>>          </Channel>
>> 
>>          <Valve
> className="org.apache.catalina.ha.tcp.ReplicationValve"
>> 
> filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;
> .*\.xls;.*\.sdf;.*\.xml;"/>
>>              <!-- only with jk_mod failover-->
>>          <Valve
> className="org.apache.catalina.ha.session.JvmRouteBinderValve"
>>                 enabled="true" sessionIdAttribute="takeoverSessionid"
> />
>> <!--
>>          <Deployer
> className="org.apache.catalina.ha.deploy.FarmWarDeployer"
>>                    tempDir="/tmp/war-temp/"
>> 
> deployDir="/usr/local/apache/node2-tomcat-6.0.26/webapps"
>>                    watchDir="/tmp/war-listen/"
>>                                        watchEnabled="true"/>
>> -->
>>                  <!-- only with jk_mod and jvmroutebindervalve--> 
>>          <ClusterListener
> className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListene
> r"/>
>>          <ClusterListener
> className="org.apache.catalina.ha.session.ClusterSessionListener"/>
>>        </Cluster>
>> 
>> <Valve
> className="org.apache.catalina.ha.authenticator.ClusterSingleSignOn" />
>> 
>> <Valve className="org.apache.catalina.valves.AccessLogValve"
> directory="logs"  
>>               prefix="webappqa_node2_access_log." suffix=".log"
> pattern="common" resolveHosts="false"/>
>> 
>>      </Host>
>> </Engine>
>> 
>> 
>> -----Original Message-----
>> From: Andrew Bruno [mailto:andrew.br...@gmail.com] 
>> Sent: Monday, June 21, 2010 10:09 PM
>> To: Tomcat Users List
>> Subject: Re: question for sso session replication in tomcat 6.0.26
>> 
>> Oh sorry, I re-read your answer.  Not sure why SSO is not working, be
>> interested to find out though..
>> 
>> AB
>> 
>> On Tue, Jun 22, 2010 at 3:04 PM, Andrew Bruno <andrew.br...@gmail.com>
> wrote:
>>> Hi Yasushi
>>> 
>>> In your serverl.xml have you added the jvmroute to the Engine?
>>> 
>>> i.e.
>>> 
>>> <Engine name="Catalina" defaultHost="localhost" jvmRoute="1">
>>> 
>>> Andrew
>>> 
>>> On Tue, Jun 22, 2010 at 2:50 PM, Okubo, Yasushi (TSD)
> <yasushi.ok...@takedasd.com> wrote:
>>>> Hi Andrew
>>>> 
>>>> Thank for your post.  When I checked the session id from firefox,
> sso session id [jsessionidsso] does not have jvmroute info, but only
> jsessionid has jvmroute.  So, session replication upon failover is
> working fine, but singlesionon upon failover is not working on tomcat
> 6.0.x (including 6.0.26).
>>>> 
>>>> yasushi
>>>> 
>>>> -----Original Message-----
>>>> From: Andrew Bruno [mailto:andrew.br...@gmail.com]
>>>> Sent: Monday, June 21, 2010 9:18 PM
>>>> To: Tomcat Users List
>>>> Subject: Re: question for sso session replication in tomcat 6.0.26
>>>> 
>>>> Looking at the code I think this is wrong
>>>> 
>>>> if (!_ssoSessionId.contains("." + jvmRoute)) {
>>>>  _ssoSessionId += "." + jvmRoute;
>>>>  response.addCookie(new Cookie(_SSO_SESSION_COOKIE_NAME,
> _ssoSessionId));
>>>> }
>>>> 
>>>> The original sessionId will already have the "."+_any_other_jvmRoute
>>>> included, so you need to substring it, and append the new jvmRoute.
>>>> 
>>>> _ssoSessionId= _ssoSessionId.substring(0,
> _ssoSessionId.indexOf("."))
>>>> 
>>>> and then add
>>>> 
>>>> _ssoSessionId += "." + jvmRoute;
>>>> 
>>>> AB
>>>> 
>>>> On Tue, Jun 22, 2010 at 1:03 PM, Okubo, Yasushi (TSD)
>>>> <yasushi.ok...@takedasd.com> wrote:
>>>>> Hi experts
>>>>> 
>>>>> 
>>>>> 
>>>>> I found this old email from archive in TC 5.5.23.
>>>>> 
>>>>> Does this problem still exist in tomcat 6.0.x or 6.0.26?
>>>>> 
>>>>> 
>>>>> 
>>>>> When failover occurs, sso session id is updated with new number
> after
>>>>> forcing a user to relogin to the application since sso session id
> is not
>>>>> replicated and rewritten correctly.  Could someone explain what is
>>>>> expected in current tomcat 6.0.x cluster upon failover?  Should sso
>>>>> session id is replicated correctly in tomcat 6.0.x?
>>>>> 
>>>>> 
>>>>> 
>>>>> Thanks,
>>>>> 
>>>>> yasushi
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> ROOKIE wrote:
>>>>> Hi,
>>>>> I have a problem with tomcat cluster + mod_proxy load balancer :
>>>>> 
>>>>> We have a main app which authenticate itself to a webapp and from
> this
>>>>> app one
>>>>> can launch embedded apps which use the SSO cookie to access other
>>>>> webapps on
>>>>> the server (Single-Sign-On for the user).
>>>>> 
>>>>> Things are working perfectly for the normal cookie but not for the
> sso
>>>>> cookie.
>>>>> 
>>>>> 
>>>>> The problem I have is that tomcat does not replicate SSO sessions
> so
>>>>> when these embedded apps route through the load balancer we get
> 401s on
>>>>> all the other cluster members except the one which actually
> generated
>>>>> the SSO cookie.
>>>>> 
>>>>> I wanted to know if we can edit the SSO cookie generated by tomcat
> to
>>>>> also
>>>>> contain the jvmRoute parameter so that the load balancer directly
> goes
>>>>> to the
>>>>> correct cluster member.
>>>>> 
>>>>> 
>>>>> I tried doing this in my code by fetching the SSO cookie and
> appending
>>>>> to it
>>>>> the jvmRoute as follows :
>>>>> 
>>>>>       HttpServletRequest request =
>>>>> (HttpServletRequest)Security.getContext(HttpServletRequest.class);
>>>>>       HttpServletResponse response =
>>>>> 
> (HttpServletResponse)Security.getContext(HttpServletResponse.class);
>>>>>       if(request != null) {
>>>>>           String jvmRoute = "Vinod_Cluster_1";    // as mentioned
> in
>>>>> server.xml
>>>>>           Cookie[] cookies = request.getCookies();
>>>>>           for(int nc=0; cookies != null && nc < cookies.length;
> nc++)
>>>>> {
>>>>> 
> if(_SESSION_COOKIE_NAME.equals(cookies[nc].getName())) {
>>>>>                   _sessionId = cookies[nc].getValue();
>>>>>               }
>>>>> 
>>>>> else if(_SSO_SESSION_COOKIE_NAME.equals(cookies[nc].getName())) {
>>>>> 
>>>>>                   _ssoSessionId = cookies[nc].getValue();
>>>>>                   if (!_ssoSessionId.contains("." + jvmRoute)) {
>>>>>                       _ssoSessionId += "." + jvmRoute;
>>>>> 
>>>>> response.addCookie(new Cookie(_SSO_SESSION_COOKIE_NAME,
> _ssoSessionId));
>>>>> }
>>>>> 
>>>>> 
>>>>>               }
>>>>> 
>>>>> 
>>>>> But after this I started getting 401s from even the correct cluster
>>>>> member. My guess is addCookie doesnt update the cookie in tomcat's
> cache
>>>>> which is reasonable.
>>>>> 
>>>>> Other thought was to edit tomcat's sso cookie generation code to
> append
>>>>> the
>>>>> jvmRoute to the sso cookie.
>>>>> 
>>>>> 
>>>>> Is there an better way to achieve this in my code base ?
>>>>> 
>>>>> Thanks In Advance,
>>>>> Vinod
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>> 
>>>> 
> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
>>>> For additional commands, e-mail: users-h...@tomcat.apache.org
>>>> 
>>>> 
>>>> 
>>>> 
>>>> 
> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
>>>> For additional commands, e-mail: users-h...@tomcat.apache.org
>>>> 
>>>> 
>>> 
>>> 
>> 
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
>> For additional commands, e-mail: users-h...@tomcat.apache.org
>> 
>> 
>> 
>> 
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
>> For additional commands, e-mail: users-h...@tomcat.apache.org
>> 
> 
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
> For additional commands, e-mail: users-h...@tomcat.apache.org
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to