Acegi和cas整合

 
一.配置证书
首先,打开cmd,将路径指到c盘跟目录(其实指到哪里无所谓,主要是好找)。
1.       配置 CAS 服务器端
CAS服务器端一般指一个单独的应用,并且为独立的服务器。客户端的应用需要验证时直接到CAS服务器端的机器上验证。
● 生成服务端密匙
keytool -genkey -alias casserver -keyalg RSA -keypass changeit -storepass changeit -keystore server.keystore
记住,当他问你你的您的名字与姓氏是什么?一定要输入 cas 所在服务器端的机器名或者更是域名,比如 cas 所在的服务器端的机器名字是 hostabc 那么,这里输入的名字与姓氏就是 hostabc 。如果你的服务器已经指定了域名,那么,输入的名字与姓氏就是这个域名,其它的可以不填。
● 生成服务端证书
keytool -export -alias casserver -storepass changeit -file server.cer -keystore server.keystore
       将会生成一个 server.cer 文件。
 
       ● 将服务器端证书文件导入到cacerts 文件中
keytool -import -trustcacerts -alias server -file server.cer -keystore cacerts -storepass changeit
将会在 c 盘下产生一个 cacerts 文件,将这个文件,将这个文件拷贝覆盖到 %JAVA_HOME% /jre/lib/security 中,这样,服务器端的 证书 就配置好了。
 
● 拷贝cas-server-3.0.6.zip包内的target目录下的cas.war文件到Tomcat目录下的webapps目录下。将生成好的 server.keystore 文件拷贝到 tomcat 的安装目录。
      
       ● 修改Tomcat的配置文件server.xml把以下补注释的内容打开
       <Connector port="8443" maxHttpHeaderSize="8192"
keystorePass="changeit" keystoreFile="/server.keystore"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" disableUploadTimeout="true"
               acceptCount="100" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS" />
       其中红色部分是新添加的内容。注意, keystoreFile 位置不能写错。
       Cas的服务器端整个过程完毕。
 
说明:其实这里服务器端和客户端的密匙和证书一样,这里写两个是为了能分辨清楚。
 
2.       配置 CAS 客户端
CAS客户端一般指WEB应用所在的机器。
      
● 生成客户端密匙(基本步骤与服务器端的一样)
keytool -genkey -alias casclient -keyalg RSA -keypass changeit -storepass changeit -keystore client.keystore
注意这里的客户端密匙也会像生成服务器端的密匙一样,同样会问你你的您的名字与姓氏是什么,这里输入的与服务器端输入的一样就可以了。
 
● 生成客户端证书
keytool -export -alias casclient -storepass changeit -file client.cer -keystore client.keystore
 
     导入客户端证书文件到cacerts 文件中
keytool -import -trustcacerts -alias client -file client.cer -keystore cacerts -storepass changeit
将会生一个 cacerts 文件,将这个文件,将这个文件拷贝覆盖到客户端的 %JAVA_HOME% /jre/lib/security 中,这样,客户端的 证书 就配置好了。
 
      这里的客户端用到 acegi ,也就是说身份验证到 CAS 服务器验证,认证通过返回票根后,权限的指定交由给 acegi 处理。所以要将 acegi CAS 整合, acegi 提供了与 CAS 客户端整合能力。
 
●解压缩 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 ,找到
// 认证处理过滤器,其实他并不真正处理认证,这个过滤器主要是 authenticationManager ,这个是处理认证的真正对象。
<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>
再接下来,找到
// authenticationManager 里面包含多个 providers( 供应者 ), 这些供应者为 authenticationManager 提供用户信息对象。
       <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>
注意 org.acegisecurity.ui.cas.CasProcessingFilterEntryPoint 的地方里面有个 loginUrl ,这个 url 是当点击受保护页面时,如果没有验证身份时所跳转到的 cas 服务器端的登陆页面,里面的地址必须指定到 CAS 服务器端的机器名或者是域名,就是生成服务器端证书时的那个 您的名字与姓氏是什么?所输入的内容。
ticketValidator 也同样。
serviceProperties 里面的 service 是登陆成功后会返回到客户端登陆前的页面,所以这里的 localhost 一般不变或者是客户端的 IP 地址。
 
客户端完毕。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值