sakai:2.7.1
cas-server:3.4.3.1
cas-client:3.1.12
关于sakai如何配置单点登录官方有一篇教程,http://confluence.sakaiproject.org/display/~steve.swinsburg/CASifying+Sakai.不过里面使用的cas-client版本较低,目前cas官方最新版本已经是3.1.12。新版本和老版本差异极大,不可能再按照sakai官方给出的教程来配置cas,所以要么使用老版本的cas,要么去cas官方查看文档自己进行配置。我使用了3.1.12版本,为了便于以后查阅,特将配置过程记录下来。
通过web.xml进行配置:
通过编辑/webapp/sakai-login-tool/web-inf/web.xml文件添加如下filter:
首先配置Authentication 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://yourdomain:port/cas/login</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>http://yourdomain:port/client</param-value>
</init-param>
</filter>
接着配置Validation Filter
<filter>
<filter-name>CAS Validation Filter</filter-name>
<filter-class>org.jasig.cas.client.validation.Cas10TicketValidationFilter</filter-class>
<init-param>
<param-name>casServerUrlPrefix</param-name>
<param-value>https://yourdomain:port/cas</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>https://yourdomain:port/clietn</param-value>
</init-param>
</filter>
然后配置HttpServletRequestWrapperFilter
<filter>
<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
<filter-class>org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>
</filter>
最后配置AssertionThreadLocalFilter
<filter>
<filter-name>CAS Assertion Thread Local Filter</filter-name>
<filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>
</filter>
可以看出配置实际上是挺简单的,和使用老版本其实差不多,只是对filter类的引用不同。需要指出的是上面filter的顺序是不可以改变的,另外第一步,第二步可以有多种选择,cas提供了多个不同的filter,具体可以参考官方文档。除了为web.xml添加相应的filter以外,还要配置sakai.properties文件,具体如下:
login.use.xlogin.to.relogin=false
top.login=false
container.login = true
loggedOutUrl=http://localhost:8080/cas/logout?service=http://localhost:8080
#如果同时使用cas登录和sakai内部登录,可以添加如下配置
xlogin.text=Login
xlogin.enabled=true
配置到这里基本已经完成,但是如果你直接使用cas-server中的war包,可能会遇到退出后不能跳转到指定的页面,这时需要修改下cas-server的配置:
<bean id="logoutController" class="org.jasig.cas.web.LogoutController"
p:centralAuthenticationService-ref="centralAuthenticationService"
p:logoutView="casLogoutView"
p:warnCookieGenerator-ref="warnCookieGenerator"
<!--添加followServiceRedirects-->
p:followServiceRedirects="true"
p:ticketGrantingTicketCookieGenerator-ref="ticketGrantingTicketCookieGenerator" />
注意使用的cas帐户必须存在于sakai中,否则无法正常登录。
详细参考cas官方文档:https://wiki.jasig.org/display/CASUM/Home
cas-client 3.1配置:https://wiki.jasig.org/display/CASC/CAS+Client+for+Java+3.1
到这一步对于cas的配置久涮完成了,当然如果需要实现单点登出则还需要进行一些配置,这里就不写出来了,官方有相应的文档。
对cas进行相应配置后,还需要配置ssl,如果不是安全连接,cas就不会发布TGC。如何配置ssl就不赘述了,网上有很多资料,这里
将我遇到的一个问题记录一下:
我的sakai和cas服务器是在统一个tomcat里,而另外一个web服务在别的机器上,在配置完成后发现会抛出如下异常
PKIX path building failed: unable to find valid certification path to requested target
虽然知道是数字签名的问题,但是实在不知到如何解决,后来在网上查到需要将数字签名导入,于是将有cas的数字签名通过如下命令导入到
另一台机子,才解决了问题。
keytool -import -trustcacerts -alias cng_domain -file cas.crt -keystore % $JAVA_HOME/jre/lib/scurity/cacerts
[思开社区
http://www.sakai-edu.net]