Junky's IT Notebook

统计

留言簿(8)

积分与排名

WebSphere Studio

阅读排行榜

评论排行榜

CAS及客户端Acegi的安装配置指南(下)

 四.改造acegi-security-sample-tutorial

       解压缩acegi-security-1.0.1.zip,拷贝acegi-security-sample-tutorial.war到%CATALINA_HOME%/webapps目录下,重启tomcat,acegi-security-sample-tutorial即已发布。现在我们将其改造为使用CAS进行用户的登录和认证。

    用编辑器打开WEB-INF/applicationContext-acegi-security.xml,找到

       <bean id="authenticationProcessingFilter" class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilter">

                  <property name="authenticationManager" ref="authenticationManager"/>

                  <property name="authenticationFailureUrl" value="/acegilogin.jsp?login_error=1"/>

              <property name="defaultTargetUrl" value="/"/>

              <property name="filterProcessesUrl" value="/j_acegi_security_check"/>

              <property name="rememberMeServices" ref="rememberMeServices"/>

       </bean>

将其替换为:

       <bean id="authenticationProcessingFilter" class="org.acegisecurity.ui.cas.CasProcessingFilter">

              <property name="authenticationManager" ref="authenticationManager"/>

              <property name="authenticationFailureUrl" value="/acegilogin.jsp?login_error=1"/>

              <property name="defaultTargetUrl" value="/"/>

              <property name="filterProcessesUrl" value="/j_acegi_cas_security_check"/>

              <property name="rememberMeServices" ref="rememberMeServices"/>

       </bean>

其中,authenticationFailureUrl是认证失败时显示的页面,acegi-security-sample-tutorial登录失败时会在登录页(acegilogin.jsp)显示失败原因,现改为使用CAS之后,acegi-security-sample-tutorial使用CAS的登录页面,故acegilogin.jsp可去掉。接下来,找到

              <bean class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilterEntryPoint">

                     <property name="loginFormUrl" value="/acegilogin.jsp"/>

                     <property name="forceHttps" value="false"/>

              </bean>

替换为:

              <bean class="org.acegisecurity.ui.cas.CasProcessingFilterEntryPoint">

                     <property name="loginUrl">

                            <value>https://localhost:8443/cas/login</value>

                     </property>

                     <property name="serviceProperties">

                            <ref bean="serviceProperties"/>

                     </property>

              </bean>

再接下来,找到

       <bean id="authenticationManager" class="org.acegisecurity.providers.ProviderManager">

              <property name="providers">

                     <list>

                            <ref local="daoAuthenticationProvider"/>

                            <bean class="org.acegisecurity.providers.anonymous.AnonymousAuthenticationProvider">

                                   <property name="key" value="changeThis"/>

                            </bean>

                            <bean class="org.acegisecurity.providers.rememberme.RememberMeAuthenticationProvider">

                                   <property name="key" value="changeThis"/>

                            </bean>

                     </list>

              </property>

       </bean>

将<ref local="daoAuthenticationProvider"/>修改为<ref local="casAuthenticationProvider"/>,并添加以下bean:

       <bean id="casAuthenticationProvider" class="org.acegisecurity.providers.cas.CasAuthenticationProvider">

              <property name="ticketValidator">

                     <ref bean="ticketValidator"/>

              </property>

              <property name="casProxyDecider">

                     <ref bean="casProxyDecider"/>

              </property>

              <property name="statelessTicketCache">

                     <ref bean="statelessTicketCache"/>

              </property>

              <property name="casAuthoritiesPopulator">

                     <ref bean="casAuthritiesPopulator"/>

              </property>

              <property name="key">

                     <value>some_unique_key</value>

              </property>

       </bean>

    

       <bean id="ticketValidator" class="org.acegisecurity.providers.cas.ticketvalidator.CasProxyTicketValidator">

              <property name="casValidate">

                     <value>https://localhost:8443/cas/proxyValidate</value>

              </property>

              <property name="serviceProperties">

                     <ref bean="serviceProperties"/>

              </property>

       </bean>

    

       <bean id="serviceProperties" class="org.acegisecurity.ui.cas.ServiceProperties">

              <property name="service">

                     <value>https://localhost:8443/acegi-security-sample-tutorial/j_acegi_cas_security_check</value>

              </property>  

       </bean>

    

       <bean id="casProxyDecider" class="org.acegisecurity.providers.cas.proxy.RejectProxyTickets"/>

    

       <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="casAuthritiesPopulator" class="org.acegisecurity.providers.cas.populator.DaoCasAuthoritiesPopulator">

              <property name="userDetailsService">

                     <ref bean="userDetailsService"/>

              </property>

       </bean>

改造完毕!

 

    五.配置CAS使用JDBC数据源进行用户认证

       CAS默认设置为只要用户名和密码相同,即可进行登录,这在现实使用中是不允许的。我们修改为使用MySQL的test数据库中的app_user表作为用户数据源。首先,我们在test库中创建一个表:

CREATE TABLE `app_user` (

  `username` varchar(30) NOT NULL default '',

  `password` varchar(45) NOT NULL default '',

  PRIMARY KEY  (`username`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

并添加如下用户:

INSERT INTO `app_user` (`username`,`password`) VALUES

 ('dianne','emu'),

 ('marissa','koala'),

 ('peter','opal'),

 ('scott','wombat');

用编辑器打开%CATALINA_HOME%/webapps/cas/WEB-INF/deployerConfigContext.xml,找到

    <bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />

注释掉该行,在其下加入:

<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">

                            <property name="sql" value="select password from app_user where username=?" />

                            <property name="dataSource" ref="dataSource" />

                     </bean>

并添加一个bean:

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" destroy-method="close">

       <property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property>

       <property name="url"><value>jdbc:mysql://localhost:3306/test</value></property>

       <property name="username"><value>test</value></property>

       <property name="password"><value>test</value></property>

    </bean>

拷贝cas-server-jdbc-3.0.5-rc2.jar和mysql-connector-java-3.1.12-bin.jar到%CATALINA_HOME%/webapps/cas/WEB-INF/lib下。

 

    重新启动tomcat,在浏览器中输入http://localhost:8080/acegi-security-sample-tutorial,你会发现,一旦你访问了受保护的页面,请求就会被重定向到CAS的登录页面,登录成功之后请求会被再被定向到最初访问的页面,如果有多个系统,在这些系统之间进行切换将不会要求用户重新登录,这就达到了单点登录的目的。

 

参考文献:

 

posted on 2007-05-22 11:10 junky 阅读(961) 评论(1)  编辑  收藏 所属分类: security

评论

# re: CAS及客户端Acegi的安装配置指南(下)[未登录] 2010-06-25 15:05 堕落佛

请问 j_acegi_cas_security_check 配置的是哪个 servlet?  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航: