No worries.  Its tough to remember whether the filter definition or the
mapping defines the order.  Now you'll know for future reference ;-)

I'll also update the wiki doc to say you need to check the filter mappings.

Cheers,
Scott

On Thu, Aug 5, 2010 at 12:34 PM, Jiangpeng Shi <
[email protected]> wrote:

> Hey Scott,
>
> This is really embarrassing....I checked twice and was pretty confident
> that my single log out filter is the first in the chain! But I didn't
> realize that the filter's mapping is not....
> After I move the filter's mapping setting to the top, then everything works
> like magic....I spent a whole morning reading bunch of log files and try to
> find some clue but never thought check with the filter's mapping setting.
> Thank you so so much....I couldn't get this work without your help! And
> Bryan, thank you for the help, too.....
>
> --Jiangpeng Shi
>
> >>> Scott Battaglia <[email protected]> 8/5/2010 11:16 AM >>>
> Your Single Log Out Filter has to be first in the chain if you want it to
> process log out requests.
>
>
> On Wed, Aug 4, 2010 at 6:03 PM, Jiangpeng Shi <
> [email protected]> wrote:
>
> > I think I'd better add some more details information about my case:
> >
> > Currently I am using CAS 3.3.5, the client is 3.1.10. All the CAS server
> > and client application are sitting in same server (weblogic), and all the
> > client apps are participant of SSO. The sign on process works very good
> for
> > all the client applications, and, I can also sign out client application
> if
> > I use request.getSession().invalidate(). Now the problem is that I
> couldn't
> > get single sign out work.....
> >
> > Here is my Client app's web.xml setting:
> >
> >
> >        <listener>
> >
> >
>  
> <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
> >        </listener>
> >
> >
> >        <filter>
> >           <filter-name>CAS Single Sign Out Filter</filter-name>
> >
> >
> <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
> >        </filter>
> >
> >
> >
> >                <filter>
> >                <filter-name>CAS Authentication Filter</filter-name>
> >
> >
>  
> <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
> >                <init-param>
> >                        <param-name>casServerLoginUrl</param-name>
> >                        <param-value>
> > https://mydev.mydomain.org:7002/cas/login</param-value>
> >                </init-param>
> >                <init-param>
> >                        <param-name>serverName</param-name>
> >                        <param-value>https://mydev.mydomain.org:7002
> > </param-value>
> >                </init-param>
> >                <init-param>
> >                        <param-name>renew</param-name>
> >                        <param-value>false</param-value>
> >                </init-param>
> >                <init-param>
> >                        <param-name>gateway</param-name>
> >                        <param-value>false</param-value>
> >                </init-param>
> >        </filter>
> >
> >        <filter>
> >                <filter-name>CAS Validation Filter</filter-name>
> >
> >
>  
> <filter-class>org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>
> >                <init-param>
> >                        <param-name>casServerUrlPrefix</param-name>
> >                        <param-value>https://mydev.mydomain.org:7002/cas/
> > </param-value>
> >                </init-param>
> >                <init-param>
> >                        <param-name>serverName</param-name>
> >                        <param-value>https://mydev.mydomain.org:7002
> > </param-value>
> >                </init-param>
> >
> >
> >        </filter>
> >
> >        <filter>
> >                <filter-name>CAS HttpServletRequest Wrapper
> > Filter</filter-name>
> >
> >
>  
> <filter-class>org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>
> >        </filter>
> >
> >        <filter>
> >                <filter-name>CAS Assertion Thread Local
> Filter</filter-name>
> >
> >
>  
> <filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>
> >        </filter>
> >
> >
> >        <filter-mapping>
> >                <filter-name>CAS Authentication Filter</filter-name>
> >                <url-pattern>/protected/*</url-pattern>
> >        </filter-mapping>
> >
> >        <filter-mapping>
> >                <filter-name>CAS Validation Filter</filter-name>
> >                <url-pattern>/*</url-pattern>
> >        </filter-mapping>
> >
> >        <filter-mapping>
> >                <filter-name>CAS HttpServletRequest Wrapper
> > Filter</filter-name>
> >                <url-pattern>/*</url-pattern>
> >        </filter-mapping>
> >
> >        <filter-mapping>
> >                <filter-name>CAS Assertion Thread Local
> Filter</filter-name>
> >                <url-pattern>/*</url-pattern>
> >        </filter-mapping>
> >
> >        <filter-mapping>
> >                <filter-name>CAS Validation Filter</filter-name>
> >                <url-pattern>/proxyCallback</url-pattern>
> >        </filter-mapping>
> >
> >        <filter-mapping>
> >           <filter-name>CAS Single Sign Out Filter</filter-name>
> >           <url-pattern>/*</url-pattern>
> >        </filter-mapping>
> >
> >
> > Here is the argumentExtractorsConfiguration.xml:
> >
> >  <beans xmlns="http://www.springframework.org/schema/beans";
> >       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
> >       xmlns:p="http://www.springframework.org/schema/p";
> >       xmlns:util="http://www.springframework.org/schema/util";
> >       xsi:schemaLocation="http://www.springframework.org/schema/beans
> > http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
> >       http://www.springframework.org/schema/util
> > http://www.springframework.org/schema/util/spring-util-2.0.xsd";>
> >        <description>
> >                Argument Extractors are what are used to translate HTTP
> > requests into requests of the appropriate protocol (i.e. CAS, SAML,
> SAML2,
> >                OpenId, etc.).  By default CAS and SAML are enabled.
> >        </description>
> >        <bean
> >                id="casArgumentExtractor"
> >                class="org.jasig.cas.web.support.CasArgumentExtractor"
> >         p:httpClient-ref="httpClient" />
> >
> >        <bean id="samlArgumentExtractor"
> > class="org.jasig.cas.web.support.SamlArgumentExtractor"
> >             p:httpClient-ref="httpClient" />
> >
> >        <util:list id="argumentExtractors">
> >                <ref bean="casArgumentExtractor" />
> >                <ref bean="samlArgumentExtractor" />
> >        </util:list>
> > </beans>
> >
> >
> > From Client application, I just simply add a link, which redirect to:
> > https://mydev.mydomain.org:7002/cas/logout?url=/casClient
> >
> >
> > After I click this logout link in client app, I do see CAS's log out
> > confirm page. Based on my understand, CAS server is supposed to send out
> > "POST" request to all registered applications, but seems it not
> happen....
> >
> > I check cas.log in app server, which has no records about log out....or
> any
> > records about httpClient....Here is part of cas.log:
> >
> > 2010-08-04 16:51:15,958 INFO
> > [org.jasig.cas.authentication.AuthenticationManagerImpl] -
> > AuthenticationHandler:
> > edu.utsw.ais.cas.authentication.UTSWSimpleAuthenticationHandler
> successfully
> > authenticated the user which provided the following credentials:
> [username:
> > testUser]
> > 2010-08-04 16:51:16,005 INFO
> > [org.jasig.cas.CentralAuthenticationServiceImpl] - Granted service ticket
> > [ST-1-uB5GQK0DlpPnJdZc57Ix-cas] for service [
> > https://mydev.mydomain.org:7002/casClient2/protected/index.jsp] for user
> > [testUser]
> > ......
> >
> > Then there are no any records about sending requst back to client app,
> not
> > even any info about "sign out"....
> >
> >
> > I also check access.log in my weblogic server, and here is record saved:
> >
> >
> > 129.112.115.6 - - [04/Aug/2010:16:09:51 -0500] "GET
> > /casClient2/protected/index.jsp?ticket=ST-16-HzmgD6XNY0O1eIrjCv5P-cas
> > HTTP/1.1" 302 327
> > 129.112.115.6 - - [04/Aug/2010:16:09:51 -0500] "GET
> > /casClient2/protected/index.jsp HTTP/1.1" 200 1023
> > 172.18.101.182 - - [04/Aug/2010:16:10:00 -0500] "POST
> > /casClient2/protected/index.jsp HTTP/1.1" 302 511
> > 129.112.115.6 - - [04/Aug/2010:16:10:00 -0500] "GET
> > /cas/logout?url=/casClient2 HTTP/1.1" 200 1671
> > 172.18.101.182 - - [04/Aug/2010:16:10:00 -0500] "GET
> > /cas/login?service=https%3A%2F%2Fmydev.mydomain.org
> %3A7002%2FcasClient2%2Fprotected%2Findex.jsp
> > HTTP/1.1" 200 3696
> > 129.112.115.6 - - [04/Aug/2010:16:10:41 -0500] "GET /casClient2 HTTP/1.1"
> > 302 289
> >
> > There are no any "POST" request received after the "GET" of log out
> > request...
> >
> > In CAS server, one thing I have changed is I use a customized
> > authentication handler to do authentication. I am not sure this will
> cause
> > the issue? Here is the part of deployerConfigContext.xml:
> >
> >        <bean id="authenticationManager"
> >
> >  class="org.jasig.cas.authentication.AuthenticationManagerImpl">
> >                <property name="credentialsToPrincipalResolvers">
> >                        <list>
> >                                <bean
> >
> >
>  
> class="org.jasig.cas.authentication.principal.UsernamePasswordCredentialsToPrincipalResolver"
> > />
> >                                <bean
> >
> >
>  
> class="org.jasig.cas.authentication.principal.HttpBasedServiceCredentialsToPrincipalResolver"
> > />
> >                        </list>
> >                </property>
> >                <property name="authenticationHandlers">
> >                        <list>
> >                                <bean
> >
> class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"
> >                                        p:httpClient-ref="httpClient" />
> >                                <bean
> >
> >  class="edu.utsw.ais.cas.authentication.UTSWSimpleAuthenticationHandler"
> />
> >                        </list>
> >                </property>
> >        </bean>
> >
> >        <bean id="userDetailsService"
> >
> class="edu.utsw.ais.cas.authentication.service.ServiceUserDetailsServiceImpl">
> >
> >        </bean>
> >
> >        <bean id="attributeRepository"
> >
> >  class="org.jasig.services.persondir.support.StubPersonAttributeDao">
> >                <property name="backingMap">
> >                        <map>
> >                                <entry key="uid" value="uid" />
> >                                <entry key="eduPersonAffiliation"
> > value="eduPersonAffiliation" />
> >                                <entry key="groupMembership"
> > value="groupMembership" />
> >                        </map>
> >                </property>
> >        </bean>
> >
> >
> >        <bean id="serviceRegistryDao"
> > class="org.jasig.cas.services.JpaServiceRegistryDaoImpl"
> >   p:entityManagerFactory-ref="entityManagerFactory" />
> >
> >        <bean id="entityManagerFactory"
> >
> class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
> >                <property name="dataSource" ref="dataSource"/>
> >                <property name="jpaVendorAdapter">
> >                        <bean
> > class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
> >                                <property name="generateDdl"
> value="true"/>
> >                                <property name="showSql" value="true" />
> >                        </bean>
> >                </property>
> >                <property name="jpaProperties">
> >                        <props>
> >                                <prop
> > key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
> >                                <prop
> > key="hibernate.hbm2ddl.auto">update</prop>
> >                        </props>
> >                </property>
> >        </bean>
> >
> >        <bean id="transactionManager"
> > class="org.springframework.orm.jpa.JpaTransactionManager">
> >                <property name="entityManagerFactory"
> > ref="entityManagerFactory"/>
> >        </bean>
> >
> >        <tx:annotation-driven transaction-manager="transactionManager"/>
> >
> >
> >        <bean id="dataSource"
> > class="org.springframework.jdbc.datasource.DriverManagerDataSource"
> >                                >
> >        <property name="driverClassName"
> > value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
> >        <property name="url" value="jdbc:sqlserver://
> dbserver.mydomain.org
> > ;databaseName=casdb"/>
> >        <property name="username" value="cas"/>
> >        <property name="password" value="cas"/>
> >
> >    </bean>
> >
> >
> >
> >
> >
> >  Seems like I've never been so close to creating our own functional CAS
> > server....Any suggestion is hightly appreciated....Thanks you very much.
> >
> >
> >
> >
> > >>> Bryan Wooten <[email protected]> 8/4/2010 12:04 PM >>>
> > Here is how to do it:
> >
> > https://wiki.jasig.org/display/CASC/Configuring+Single+Sign+Out
> >
> > Just add the listener and filter to your web.xml.
> >
> > It is working well for me.
> >
> > Bryan Wooten
> >
> > [email protected]
> > Work: 801.585.9323
> > Cell: 801.414.3593
> >
> >
> > -----Original Message-----
> > From: Jiangpeng Shi [mailto:[email protected]]
> > Sent: Wednesday, August 04, 2010 10:51 AM
> > To: [email protected]
> > Subject: [cas-user] a new single sign out question
> >
> > I asked a question about an issue that I couldn't logout from SSO by
> using
> > request.getSession().invalidate(), and acevedo gave me a very good
> > suggestion. He helped me solve my issue very well. But seems I am still
> > having some issues with Single sign out: How can I sign out all client
> apps
> > when I sign out from one of client apps?
> > My current case is:
> > I have 4 client app, which all using CAS and SSO. For each client app, I
> am
> > using following code in each client to log out:
> >
> > request.getSession().invalidate();
> > response.sendRedirect("https://cas.mywork.org:7088/cas/logout?url=/myapp
> > ");
> >
> > For each client, the log out works well, but, seems I have to logout each
> > client one by one, which means I can't logout all client apps all
> together
> > by just signing out from one client application. Are there any way that
> we
> > can let user sign out from app and then sign out all other Single Sign On
> > client apps?
> >
> > Thanks a lot in advance.
> >
> > --Jiangpeng Shi
> >
> >
> >
> >
> > --
> > You are currently subscribed to [email protected] as:
> > [email protected]
> > To unsubscribe, change settings or access archives, see
> > http://www.ja-sig.org/wiki/display/JSG/cas-user
> >
> >
> > --
> > You are currently subscribed to [email protected] as:
> > [email protected]
> > To unsubscribe, change settings or access archives, see
> > http://www.ja-sig.org/wiki/display/JSG/cas-user
> >
> >
> > --
> > You are currently subscribed to [email protected] as:
> > [email protected]
> > To unsubscribe, change settings or access archives, see
> > http://www.ja-sig.org/wiki/display/JSG/cas-user
> >
> >
>
> --
> You are currently subscribed to [email protected] as:
> [email protected]
> To unsubscribe, change settings or access archives, see
> http://www.ja-sig.org/wiki/display/JSG/cas-user
>
> --
> You are currently subscribed to [email protected] as:
> [email protected]
> To unsubscribe, change settings or access archives, see
> http://www.ja-sig.org/wiki/display/JSG/cas-user
>
>

-- 
You are currently subscribed to [email protected] as: 
[email protected]
To unsubscribe, change settings or access archives, see 
http://www.ja-sig.org/wiki/display/JSG/cas-user

Reply via email to