Thank you!  Looked like Greek to me on Friday, today it made perfect sense.

For the record here is what I had to do:

Cas Client web.xml

<filter>   <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
<filter-class>org.jasig.cas.client.util.HttpServletRequestWrapperFilter</fil
ter-class>
    <init-param>
        <param-name>roleAttribute</param-name>
        <param-value>Roles</param-value>
    </init-param>
</filter>

Then in the Cas client jsp file:

<%if (request.isUserInRole(" PersonInfo")) { %>         <b>You have the role
PersonInfo!<b> <% } %>

On 5/15/10 12:06 AM, "Scott Battaglia" <[email protected]> wrote:

> I'm not sure I follow.  You're trying to use the attributes in your CAS
> client.  So I'm not sure why you're showing me server configuration (unless
> I'm misunderstanding you).
> 
> If you're using this:
> https://www.ja-sig.org/svn/cas-clients/java-client/trunk/cas-client-core/src/m
> ain/java/org/jasig/cas/client/util/HttpServletRequestWrapperFilter.java
> 
> You can specify the attribute to use for roles as part of your config (the
> init-param is "roleAttribute").
> 
> Cheers,
> Scott
> 
> 
> On Fri, May 14, 2010 at 4:01 PM, Acevedo User <[email protected]> wrote:
>> Do you mean the ldapAuthProvider bean?  Below is my config file.  I have the
>> ldap provider bean commented out because I could not get it working and was
>> going to try again later.
>> 
>> My deployerConfigContext.xml
>> 
>> <code>
>> <?xml version="1.0" encoding="UTF-8"?> <!--    | deployerConfigContext.xml
>> centralizes into one file some of the declarative configuration that    | all
>> CAS deployers will need to modify.    |    | This file declares some of the
>> Spring-managed JavaBeans that make up a CAS deployment.      | The beans
>> declared in this file are instantiated at context initialization time by the
>> Spring     | ContextLoaderListener declared in web.xml.  It finds this file
>> because this    | file is among those declared in the context parameter
>> "contextConfigLocation".    |    | By far the most common change you will
>> need to make in this file is to change the last bean    | declaration to
>> replace the default SimpleTestUsernamePasswordAuthenticationHandler with    |
>> one implementing your approach for authenticating usernames and passwords.
>>    +--> <beans xmlns="http://www.springframework.org/schema/beans
>> <http://www.springframework.org/schema/beans> "
>>       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>>       xmlns:p="http://www.springframework.org/schema/p
>> <http://www.springframework.org/schema/p> "
>>       xmlns:security="http://www.springframework.org/schema/security
>> <http://www.springframework.org/schema/security> "
>>       xsi:schemaLocation="http://www.springframework.org/schema/beans
>> http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
>>  http://www.springframework.org/schema/security
>> http://www.springframework.org/schema/security/spring-security-2.0.xsd";
>> <http://www.springframework.org/schema/security/spring-security-2.0.xsd%22> >
>>    <!--        | This bean declares our AuthenticationManager.  The
>> CentralAuthenticationService service bean        | declared in
>> applicationContext.xml picks up this AuthenticationManager by reference to
>> its id,         | "authenticationManager".  Most deployers will be able to
>> use the default AuthenticationManager        | implementation and so do not
>> need to change the class of this bean.  We include the whole        |
>> AuthenticationManager here in the userConfigContext.xml so that you can see
>> the things you will        | need to change in context.        +-->    <bean
>> id="authenticationManager"
>>        class="org.jasig.cas.authentication.AuthenticationManagerImpl">
>>        <!--            | This is the List of CredentialToPrincipalResolvers
>> that identify what Principal is trying to authenticate.            | The
>> AuthenticationManagerImpl considers them in order, finding a
>> CredentialToPrincipalResolver which             | supports the presented
>> credentials.            |            | AuthenticationManagerImpl uses these
>> resolvers for two purposes.  First, it uses them to identify the Principal
>>            | attempting to authenticate to CAS /login .  In the default
>> configuration, it is the DefaultCredentialsToPrincipalResolver            |
>> that fills this role.  If you are using some other kind of credentials than
>> UsernamePasswordCredentials, you will need to replace            |
>> DefaultCredentialsToPrincipalResolver with a CredentialsToPrincipalResolver
>> that supports the credentials you are            | using.            |
>>            | Second, AuthenticationManagerImpl uses these resolvers to
>> identify a service requesting a proxy granting ticket.             | In the
>> default configuration, it is the
>> HttpBasedServiceCredentialsToPrincipalResolver that serves this purpose.
>>            | You will need to change this list if you are identifying
>> services by something more or other than their callback URL.            +-->
>>        <property name="credentialsToPrincipalResolvers">            <list>
>>            <bean
>> class="org.jasig.cas.authentication.principal.CredentialsToLDAPAttributePrinc
>> ipalResolver">                      <!-- The Principal resolver form the
>> credentials -->                      <property
>> name="credentialsToPrincipalResolver">                          <bean
>> class="org.jasig.cas.authentication.principal.UsernamePasswordCredentialsToPr
>> incipalResolver" />                      </property>      
>>                      <!--                      The query made to find the
>> Principal ID.                       "%u" will be replaced by the resolved
>> Principal                      -->                      <property
>> name="filter" value="(uid=%u)" />                       <!-- The attribute
>> used to define the new Principal ID -->                       <property
>> name="principalAttributeName" value="uid" />                       <property
>> name="searchBase" value="ou=People,dc=vccs,dc=edu" />
>>                      <property name="contextSource" ref="contextSource" />
>>                    <property name="attributeRepository">
>>                          <ref bean="attribRepository" />
>>                      </property>            </bean>                 <!--
>>                    | HttpBasedServiceCredentialsToPrincipalResolver supports
>> HttpBasedCredentials.  It supports the CAS 2.0 approach of
>>                    | authenticating services by SSL callback, extracting the
>> callback URL from the Credentials and representing it as a
>>                    | SimpleService identified by that callback URL.
>>                    |                    | If you are representing services by
>> something more or other than an HTTPS URL whereat they are able to
>>                    | receive a proxy callback, you will need to change this
>> bean declaration (or add additional declarations).                    +-->
>>                <!--<bean
>>                    class="org.jasig.cas.authentication.principal.HttpBasedSer
>> viceCredentialsToPrincipalResolver" />-->            </list>
>>        </property>         <!--            | Whereas
>> CredentialsToPrincipalResolvers identify who it is some Credentials might
>> authenticate,             | AuthenticationHandlers actually authenticate
>> credentials.  Here we declare the AuthenticationHandlers that            |
>> authenticate the Principals that the CredentialsToPrincipalResolvers
>> identified.  CAS will try these handlers in turn            | until it finds
>> one that both supports the Credentials presented and succeeds in
>> authenticating.            +-->        <property
>> name="authenticationHandlers">            <list>                <!--
>>                    | This is the authentication handler that authenticates
>> services by means of callback via SSL, thereby validating
>>                    | a server side SSL certificate.                    +-->
>>                <bean
>> class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentia
>> lsAuthenticationHandler"                    p:httpClient-ref="httpClient" />
>>                <!--                    | This is the authentication handler
>> declaration that every CAS deployer will need to change before deploying CAS
>>                    | into production.  The default
>> SimpleTestUsernamePasswordAuthenticationHandler authenticates
>> UsernamePasswordCredentials                    | where the username equals
>> the password.  You will need to replace this with an AuthenticationHandler
>> that implements your                    | local authentication strategy.  You
>> might accomplish this by coding a new such handler and declaring
>>                    | edu.someschool.its.cas.MySpecialHandler here, or you
>> might use one of the handlers provided in the adaptors modules.
>>                    +-->                                    <bean
>> class="org.jasig.cas.adaptors.ldap.FastBindLdapAuthenticationHandler" >
>>                  <property name="filter"
>> value="uid=%u,ou=People,dc=vccs,dc=edu" />                  <property
>> name="contextSource" ref="contextSource" />                 </bean>
>>            </list>        </property>    </bean>     <!--    This bean
>> defines the security roles for the Services Management application.  Simple
>> deployments can use the in-memory version.    More robust deployments will
>> want to use another option, such as the Jdbc version.        The name of this
>> should remain "userDetailsService" in order for Acegi to find it.         To
>> use this, you should add an entry similar to the following between the two
>> value tags:    battags=notused,ROLE_ADMIN        where battags is the
>> username you want to grant access to.  You can put one entry per line.
>>     -->        <bean id="userDetailsService"
>> class="org.springframework.security.userdetails.memory.InMemoryDaoImpl">
>>        <property name="userMap">            <value>           </value>
>>        </property>    </bean>          <bean id="contextSource"
>> class="org.springframework.security.ldap.DefaultSpringSecurityContextSource">
>> <constructor-arg value="ldapserver:389"/> <property name="userDn"
>> value="user"/> <property name="password" value="xxxxx"/> </bean>     <!--
>>    Bean that defines the attributes that a service may return.  This example
>> uses the Stub/Mock version.  A real implementation    may go against a
>> database or LDAP server.  The id should remain "attributeRepository" though.
>>     -->    <bean id="attributeRepository"
>>        class="org.jasig.services.persondir.support.StubPersonAttributeDao">
>>        <property name="backingMap">            <map>                <entry
>> key="uid" value="uid" />                <entry key="cn" value="Name" />
>>                <entry key="sn" value="LastName" />                <entry
>> key="Role" value="Roles"/>             <entry key="givenName"
>> value="Firstname"/>            <entry key="mail" value="email"/>
>>            </map>        </property>    </bean>        <bean
>> id="attribRepository"
>> class="org.jasig.services.persondir.support.ldap.LdapPersonAttributeDao">  
>>    <property name="contextSource" ref="contextSource" />    <property
>> name="baseDN" value="ou=People,dc=vccs,dc=edu" />     <property
>> name="requireAllQueryAttributes" value="true" />   <!--  Attribute mapping
>> beetween principal (key) and LDAP (value) names  used to perform the LDAP
>> search.  By default, multiple search criteria  are ANDed together.  Set the
>> queryType property to change to OR.  -->    <property
>> name="queryAttributeMapping">            <map>                  <entry
>> key="username" value="uid" />             </map>      </property>
>>     <property name="resultAttributeMapping">            <map>            <!--
>> Mapping beetween LDAP entry attributes (key) and Principal's (value) -->
>>                <entry key="cn" value="Name"/>             <entry key="sn"
>> value="LastName"/>            <entry key="Role" value="Roles"/>
>>             <entry key="givenName" value="Firstname"/>            <entry
>> key="mail" value="email"/>        </map>     </property> </bean>         <!--
>>    Sample, in-memory data store for the ServiceRegistry. A real
>> implementation    would probably want to replace this with the JPA-backed
>> ServiceRegistry DAO    The name of this bean should remain
>> "serviceRegistryDao".     -->    <bean id = "serviceRegistryDao" class =
>> "org.jasig.cas.services.InMemoryServiceRegistryDaoImpl"> <property
>> name="registeredServices"> <list> <bean class =
>> "org.jasig.cas.services.RegisteredServiceImpl" p:id ="1"
>> p:description="mywebapp Nova" p:serviceId="**/nova/**" p:name="mywebapp_nova"
>> p:theme="NOVA" p:allowedToProxy="true" p:enabled="true" p:ssoEnabled="true"
>> p:anonymousAccess="false"> <property name="allowedAttributes"
>> value="uid,Name,LastName,Roles,Firstname,email" />                </bean>    
>> <bean class = "org.jasig.cas.services.RegisteredServiceImpl" p:id ="2"
>> p:description="mywebapp TCC" p:serviceId="**/tc295/**" p:name="mywebapp_tcc"
>> p:theme="TC295" p:allowedToProxy="true" p:enabled="true" p:ssoEnabled="true"
>> p:anonymousAccess="false"> <property name="allowedAttributes"
>> value="uid,Name,LastName,Firstname" />     </bean>                        
>> </list> </property> </bean> <!--<bean id="ldapAuthProvider"
>> class="org.springframework.security.providers.ldap.LdapAuthenticationProvider
>> "> <constructor-arg> <bean
>> class="org.springframework.security.providers.ldap.authenticator.BindAuthenti
>> cator"> <constructor-arg ref="contextSource"/> <property name="userSearch"
>> ref="userSearch" /> </bean> </constructor-arg> <constructor-arg> <bean
>> class="org.springframework.security.ldap.populator.DefaultLdapAuthoritiesPopu
>> lator"> <constructor-arg ref="contextSource"/> <constructor-arg value=""/>
>> <property name="groupRoleAttribute" value="Role"/> </bean> </constructor-arg>
>> </bean> <bean id="userSearch"
>> class="org.springframework.security.ldap.search.FilterBasedLdapUserSearch">
>> <constructor-arg index="0" value=""/> <constructor-arg index="1"
>> value="(uid={0})"/> <constructor-arg index="2" ref="contextSource" /></bean>
>> --> </beans> </code>
>> 
>> 
>> 
>> On 5/14/10 3:14 PM, "Scott Battaglia" <[email protected]
>> <http://[email protected]> > wrote:
>> 
>>> There's some config you need to do on the wrapping filter to get it to chose
>>> which attribute to read from.  Did you do that?
>>> 
>>> 
>>> On Fri, May 14, 2010 at 3:08 PM, Acevedo User <[email protected]
>>> <http://[email protected]> > wrote:
>>>> Ok I got it to a point where cas server authenticates using ldap.  The CAS
>>>> client webapp directs to CAS and then the user can authenticate.
>>>> 
>>>> In my web app I can list the attributes:
>>>> 
>>>> <code>
>>>> AttributePrincipal principal = (AttributePrincipal)
>>>> request.getUserPrincipal();
>>>> 
>>>> Map attributes = principal.getAttributes();
>>>> 
>>>> 
>>>> if (attributes.size() > 0) {
>>>> 
>>>> 
>>>> out.println("You have " + attributes.size() + " attributes : <br/>");
>>>> 
>>>> Iterator keyIterator = attributes.keySet().iterator();
>>>> 
>>>> 
>>>> while (keyIterator.hasNext()) {
>>>> 
>>>> 
>>>> Object key = keyIterator.next();
>>>> 
>>>> Object value = attributes.get(key);
>>>> 
>>>> out.println("<b>" + key + "</b>" + " : " + value + "<br>");
>>>> 
>>>> }
>>>> 
>>>> } else {
>>>> 
>>>> out.println("You have no attributes set");
>>>> 
>>>> }
>>>> 
>>>> </code>
>>>> 
>>>> The problem I have now is using "request.isUserInRole" I can't get it to
>>>> match against roles.
>>>> 
>>>> On 5/14/10 2:58 PM, "Marvin Addison" <[email protected]
>>>> <http://[email protected]> > wrote:
>>>> 
>>>>>> >>  What I would like to do is be able to specify a list of attributes to
>>>>>> >> return, when I am authenticating a user. Is there anything like that
>>>>>> >> available in CAS?
>>>>> >
>>>>> > Yes.  You'll want to use the attribute release feature of CAS in
>>>>> > conjunction with the SAML protocol.  Two good CASUM wiki links:
>>>>> >  1. http://www.ja-sig.org/wiki/display/CASUM/Attributes
>>>>> >  2. http://www.ja-sig.org/wiki/display/CASUM/SAML+1.1
>>>>> >
>>>>> > M
>>>> 
>>>> Emilio S. Acevedo
>>>> Enterprise Software Developer
>>>> Virginia's Community Colleges
>>>> 1-804-423-6758
>>>> 
>>>> 
>>>> --
>>>> You are currently subscribed to [email protected]
>>>> <http://[email protected]>  as: [email protected]
>>>> <http://[email protected]>
>>>> To unsubscribe, change settings or access archives, see
>>>> http://www.ja-sig.org/wiki/display/JSG/cas-user
>>>> 
>> 
>> Emilio S. Acevedo
>> Enterprise Software Developer
>> Virginia's Community Colleges
>> 1-804-423-6758

Emilio S. Acevedo
Enterprise Software Developer
Virginia's Community Colleges
1-804-423-6758


-- 
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