Yale CAS as an Acegi Client in SpringSide

First,  Set SpringSide's web.xml,  we use Acegi CAS Filter:

     < filter-mapping >
        
< filter-name > hibernateFilter </ filter-name >
        
< url-pattern > /j_acegi_cas_security_check </ url-pattern >
    
</ filter-mapping >

We Should Set Main ACEGI application Context:
1) filterChainProxy should add a cas filter as Acegi's Sample, but here, we reuse
authenticationProcessingFilter, which we act as cas client filter.

     < bean  id ="filterChainProxy"
          class
="org.acegisecurity.util.FilterChainProxy" >
        
< property  name ="filterInvocationDefinitionSource" >
            
< value >
                CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
                PATTERN_TYPE_APACHE_ANT
                /**=httpSessionContextIntegrationFilter,anonymousProcessingFilter,authenticationProcessingFilter,rememberMeProcessingFilter,logoutFilter,channelProcessingFilter,basicProcessingFilter,securityContextHolderAwareRequestFilter,exceptionTranslationFilter,filterInvocationInterceptor
            
</ value >
        
</ property >
    
</ bean >

2) authenticationProcessingFilter, of course, play the most important role in this
applicationContext_acegi.xml.
In SpringSide,  /admin  is protected resource, so defaultTargetUrl protected it
and all those request to the target url must be authenticated by authenticationManager.
None.gif      < bean  id ="authenticationProcessingFilter"  class ="org.acegisecurity.ui.cas.CasProcessingFilter" >
None.gif        
< property  name ="authenticationManager"  ref ="authenticationManager" />
None.gif        
< property  name ="authenticationFailureUrl" >
None.gif            
< value > /security/login.jsp?login_error=1 </ value >
None.gif        
</ property >
None.gif        
< property  name ="defaultTargetUrl" >
None.gif            
< value > /admin/ </ value >
None.gif        
</ property >
None.gif        
< property  name ="filterProcessesUrl" >
None.gif            
< value > /j_acegi_cas_security_check </ value >
None.gif        
</ property >
None.gif        
< property  name ="rememberMeServices"  ref ="rememberMeServices" />
None.gif        
< property  name ="exceptionMappings" >
None.gif            
< value >
None.gif                org.acegisecurity.userdetails.UsernameNotFoundException=/security/login.jsp?login_error=user_not_found_error
None.gif                org.acegisecurity.BadCredentialsException=/security/login.jsp?login_error=user_psw_error
None.gif                org.acegisecurity.concurrent.ConcurrentLoginException=/security/login.jsp?login_error=too_many_user_error
None.gif            
</ value >
None.gif        
</ property >
None.gif    
</ bean >


3) Then, we set all the needed beans in CAS Filter
     <!--  =========  Acegi as a CAS Client的配置=============  -->  
    
< bean  id ="exceptionTranslationFilter"  class ="org.acegisecurity.ui.ExceptionTranslationFilter" >
        
< property  name ="authenticationEntryPoint" >
            
< ref  local ="casProcessingFilterEntryPoint" />
        
</ property >
    
</ bean >
    
   
<!--  cas config  -->
    
< bean  id ="casProcessingFilterEntryPoint"  class ="org.acegisecurity.ui.cas.CasProcessingFilterEntryPoint" >
        
< property  name ="loginUrl" >< value > https://sourcesite:8443/cas/login </ value ></ property >
        
< property  name ="serviceProperties" >< ref  local ="serviceProperties" /></ property >
    
</ bean >
    
    
< bean  id ="authenticationManager"  class ="org.acegisecurity.providers.ProviderManager" >
        
< property  name ="providers" >
            
< list >
                
< ref  local ="casAuthenticationProvider" />
            
</ list >
        
</ property >
    
</ bean >
    
    
< bean  id ="casAuthenticationProvider"  class ="org.acegisecurity.providers.cas.CasAuthenticationProvider" >
        
< property  name ="casAuthoritiesPopulator" >< ref  bean ="casAuthoritiesPopulator" /></ property >
        
< property  name ="casProxyDecider" >< ref  local ="casProxyDecider" /></ property >
        
< property  name ="ticketValidator" >< ref  local ="casProxyTicketValidator" /></ property >
        
< property  name ="statelessTicketCache" >< ref  local ="statelessTicketCache" /></ property >
        
< property  name ="key" >< value > my_password_for_this_auth_provider_only </ value ></ property >
    
</ bean >
    
< bean  id ="casProxyTicketValidator"  class ="org.acegisecurity.providers.cas.ticketvalidator.CasProxyTicketValidator" >
        
< property  name ="casValidate" >< value > https://sourcesite:8443/cas/proxyValidate </ value ></ property >
        
< property  name ="serviceProperties" >< ref  local ="serviceProperties" /></ property >
    
</ bean >
    
<!--  
    <bean id="casProxyDecider" class="org.acegisecurity.providers.cas.proxy.AcceptAnyCasProxy" />
    
-->
    
< bean  id ="casProxyDecider"  class ="org.acegisecurity.providers.cas.proxy.RejectProxyTickets"   />
    
    
< bean  id ="serviceProperties"  class ="org.acegisecurity.ui.cas.ServiceProperties" >
        
< property  name ="service" >
            
< value > http://gzug:8080/springside/j_acegi_cas_security_check </ value >
        
</ property >
        
< property  name ="sendRenew" >
            
< value > false </ value >
        
</ property >
    
</ bean >
    
    
< bean  id ="statelessTicketCache"  class ="org.acegisecurity.providers.cas.cache.EhCacheBasedTicketCache" >
        
< property  name ="cache" >
            
< bean  class ="org.springframework.cache.ehcache.EhCacheFactoryBean" >
                
< property  name ="cacheManager" >
                    
< bean  class ="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" />
                
</ property >
                
< property  name ="cacheName"  value ="userCache" />
            
</ bean >
        
</ property >
    
</ bean >
    
    
< bean  id ="casAuthoritiesPopulator"  class ="org.acegisecurity.providers.cas.populator.DaoCasAuthoritiesPopulator" >
        
< property  name ="userDetailsService" >< ref  local ="jdbcDaoImpl" /></ property >
    
</ bean >

    
< bean  id ="casProcessingFilter"  class ="org.acegisecurity.ui.cas.CasProcessingFilter" >
        
< property  name ="authenticationManager" >< ref  local ="authenticationManager" /></ property >
        
< property  name ="authenticationFailureUrl" >< value > /casfailed.jsp </ value ></ property >
        
< property  name ="defaultTargetUrl" >< value > / </ value ></ property >
        
< property  name ="filterProcessesUrl" >< value > /j_acegi_cas_security_check </ value ></ property >
    
</ bean >

casProcessingFilterEntryPoint is very critical,
loginUrl is the CAS Server's /login url, you should set up your CAS Server(2.0 or 3.0) and config for
those JKS keystore after enable SSL in Tomcat(Tomcat 5.5/conf/server.xml) and place the cacerts that
have the CAS Server's public cert to Acegi Client's JDK/jre/lib/security/
Check serviceProperties to make sure that  SpringSide Service url is config as /j_acegi_cas_security_check

because Yale CAS use ticket cache for SSO impl, so we should config for statelessTicketCache
Just use springframework's ehcache for cacheManager.

SpringSide use jdbcDaoImpl which perform database authentication. So I am very happy to use it
as  casAuthoritiesPopulator , which will set use detail for the user. And these info are very useful for
application authorization.
     < bean  id ="jdbcDaoImpl"
          class
="org.acegisecurity.userdetails.jdbc.JdbcDaoImpl" >
        
< property  name ="dataSource"  ref ="dataSource" />
        
< property  name ="usersByUsernameQuery" >
            
< value >
                select loginid,passwd,1 from ss_users where status='1' and loginid = ?
            
</ value >
        
</ property >
        
< property  name ="authoritiesByUsernameQuery" >
            
< value >
                select u.loginid,p.name from ss_users u,ss_roles r,ss_permissions
                p,ss_user_role ur,ss_role_permis rp where u.id=ur.user_id and
                r.id=ur.role_id and p.id=rp.permis_id and
                r.id=rp.role_id and p.status='1' and u.loginid=?
            
</ value >
        
</ property >
    
</ bean >

There is little difference between casclient 2.0.12 and Acegi, right?

Note that in my env, gzug:8080/springside is bookstore webapp
and sourcesite:8443 is the CAS 3 Server.

Hope for suggestion.....
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值