CAS-server提供了restful api供调用,要开启restful服务,首先要找到与之对应的jar包。
cas源代码里cas-server-integration-restlet这个工程就是支持restful的模块,编译出来后得到一个jar包,3.6之前的版本也可以直接下载到这个jar包。
把jar包cas-server-integration-restlet-3.5.2.jar,放到cas-server-webapp的lib目录下,除了这个jar包之外,还需要几个jar包,分别是:
com.noelios.restlet.ext.servlet,jar
com.noelios.restlet.ext.spring-1.1.0.jar
com.noelios.restlet.jar
org.restlet.ext.spring-1.1.10.jar
org.restlet-1.1.10.jar
都一并放到cas-server-webapp的lib目录下。
然后修改server的web.xml,加入一个restful的servlet
<servlet>
<servlet-name>restlet</servlet-name>
<servlet-class>com.noelios.restlet.ext.spring.RestletFrameworkServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>restlet</servlet-name>
<url-pattern>/v1/*</url-pattern>
</servlet-mapping>
再找到WEB-INF\spring-configuration下的ticketExpirationPolicies.xml,把timetokill的这个时间改大一点,10秒有点短,手动测试的时候一下ticket就过期了
<util:constant id="SECONDS" static-field="java.util.concurrent.TimeUnit.SECONDS"/>
<bean id="serviceTicketExpirationPolicy" class="org.jasig.cas.ticket.support.MultiTimeUseOrTimeoutExpirationPolicy"
c:numberOfUses="1" c:timeToKill="${st.timeToKillInSeconds:10}" c:timeUnit-ref="SECONDS"/>
server端的配置基本就这么多,然后可以启动server的tomcat
最后就可以用restful的工具来进行测试了,我这里用的是curl
第一步是登录换取tgt
curl -i -k -X POST -d "username=lhc&password=123456&service=http://192.168.56.101/omw/do/main/index" https://192.168.56.101:8443/cas/v1/tickets/
会得到一个响应:
HTTP/1.1 201 Created
Date: Tue, 28 Jun 2016 08:03:23 GMT
Location: https://192.168.56.101:8443/cas/v1/tickets/TGT-3-MIipUxjOlXiXU1Uuj0vZncjZcfeIJFKhJwegBuHDL03kfCV5ME-cas01.example.org
Accept-Ranges: bytes
Server: Noelios-Restlet-Engine/1.1.6
Content-Type: text/html;charset=ISO-8859-1
Content-Length: 448
把这个响应里的location字段后面的拷贝一下,这是第二步要访问的rest接口的url
curl -i -k -X POST -d "service=http%3A%2F%2F192.168.56.101%2Fomw%2Fdo%2Fmain%2Findex" https://192.168.56.101:8443/cas/v1/tickets/TGT-3-MIipUxjOlXiXU1Uuj0vZncjZcfeIJFKhJwegBuHDL03kfCV5ME-cas01.example.org
第二步的响应就是ticket
ST-2-AHrFkuIyZBarRPGHsbaZ-cas01.example.org
最后带上这个ticket访问上面service的地址,就是已经登录的状态
http://192.168.56.101/omw/do/main/index?ticket=ST-2-AHrFkuIyZBarRPGHsbaZ-cas01.example.org
curl里第二步的时候注意一下,这个url要进行编码。