SSO接口文档
注释:CAS(Central Authentication Service)
备注:其中的浅兰色的文件,可以在SVN的“/工作管理/SSO相关文件“路径下可以找到。
一、 在tomcat的conf/server.xml文件中加入SSL协议,配制代码如下:
<Connector protocol="org.apache.coyote.http11.Http11Protocol"
port="8443" minSpareThreads="5" maxSpareThreads="75"
enableLookups="true" disableUploadTimeout="true"
acceptCount="100" maxThreads="200"
scheme="https" secure="true" SSLEnabled="true"
keystoreFile="conf/.keystore" keystorePass="changeit"
truststoreFile="/urs/java/jdk1.6.0_23/jre/lib/security/cacerts"
clientAuth="false" sslProtocol="TLS"/>
说明:红色部分设置为当前服务器的JDK路径。(如果是使用公司统一配制好的tomcat则不用修改)
二、 替换https加密协议证书的相关文件(请先备份原有的文件):
1. 当在公司服务器上布署时,可以使用ant脚本“replaceAll.xml”添加”.keystore”和替换”cacerts”这两个文件:
l 首先要将上面的两个文件放到当前要打包的应用系统的工程中,例如:
WEB-INF/目录下的ext文件夹下。
l 然后使用ant脚本”deploy_create.xml”将以上两个文件打入zip包中,脚本代码片断如下:
<target name=”copyDeploy”depends=”init”>
<echo>拷贝执行部署需要的ant脚本</echo>
<copy todir=”${rarDest}${DSTAMP}${TSTAMP}”>
<fileset dir=”../../WebContent/WEB-INF/ext”>
<include name=”*”/>
</fileset>
</copy>
</target>
l 在服务器的usr/local/tomcat/conf路径下添加”.keystore”文件
l 在服务器的usr/java/jdk1.6.0_23/jre/lib/security路径下替换“cacerts”文件
2. 如果是自己本机上的应用系统要与单点登录联调,可以手工添加本机tomcat路径的conf目录下的“.keystore”和替换本机jdk路径下“jre/lib/security”目录下的“cacerts”文件
三、 将单点登录应用端的相关jar包拷到应用系统的lib文件夹中,单点登录相关jar包文件名如下(如果系统中已经有的jar包不用添加):
casclient.jar (应用系统端单点登录核心jar包)
commons-logging-api.jar
junit.jar
mockrunner.jar
servlet.jar
四、 在应用系统工程的web.xml文件中加入单点登录过滤器,配制代码如下:
<filter>
<!-- 单点登录过滤器 -- >
<filter-name>CASFilter</filter-name> <filter-class>edu.yale.its.tp.cas.client.filter.CASFilter</filter-class>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.loginUrl</param-name>
<!-- 重定向单点登录的登录页面。 ssoi.uyunke.com:8443是单点登录的域名和端口号 -- >
<param-value>https://ssoi.uyunke.com:8443/cas/login</param-value>
</init-param>
<init-param> <param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>
<!--重定向单点登录的校验 -- >
<param-value>https://ssoi.uyunke.com:8443/cas/proxyValidate</param-value>
</init-param>
<init-param> <param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>
<!--应用端的主机名和端口号。需要改为当前应用系统的域名和端口号。-- >
<param-value>ls:8080</param-value>
</init-param>
<init-param> <param-name>edu.yale.its.tp.cas.client.filter.wrapRequest</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<!--这里是配制应用端要过滤的路径-- >
<filter-mapping>
<filter-name>CASFilter</filter-name> <url-pattern>/*</url-pattern>
</filter-mapping>
关于不通过单点登录过滤器的说明:
l 这与要过滤路径的配制有关,所以只需要将要过滤的东西放在一个路径下;而那些不需要的过滤的东西放在另一个路径下。这样在配制过滤路径时只配制上要过滤的路径就可以了,如只过滤html路径下的文件:/html/*。
l 过滤路径不支持通配符加后缀名的格式如:/html/*.jsp
l 配制的过滤路径不能与其它过滤器的过滤路径相同,否则会产生冲突。
l CAS过滤器只会过滤页面,所以要创建struts2的拦截器,拦截直接访问Action的URL(*.action),如果usrId为空则转向登录应用系统的ssologin.jsp页面(拦截器的文件名为“IsLoginInterceptor.java”)
五、 当用户正确登录后会转向用户登录的Action,当在Action中要取得当前正确登录单点登录的用户ID时,通过如下代码取得userId:
l 第一种方法:
session.getAttribute("edu.yale.its.tp.cas.client.filter.user");
l 第二种方法:
import edu.yale.its.tp.cas.client.filter.CASFilter;
session.getAttribute(CASFilter.CAS_FILTER_USER);
备注:上面两种方法会得到一个Object类型的userId,可以强制转换成String类型
六、 应用系统将原有的登录页面改为单点登录页面的改造如下:
l 将原有的jsp登录页面改为:只作转向登录数据处理的Action中的方法。如:“ssologin.jsp”,其中“window.location.href=”后面改为自己登录数据处理的Action路径。
七、 当应用系统需要设置用户登出的超链接时:
1. 因为使用的是CAS应用系统端的自定义标签,所以首先要把cas.tld文件复制到应用系统的WEB-INF目录下,在web.xml中注册cas.tld文件代码如下:
<jsp-config>
<taglib>
<taglib-uri>cas</taglib-uri>
<taglib-location>/WEB-INF/cas.tld</taglib-location>
</taglib>
</jsp-config>
说明:红色部分修改为WEB-INF目录下存放cas.tld文件的目录。
2. 将logout.jsp文件拷到当前应用系统的工程中(这个jsp页面可以不用通过CAS过滤器),关键代码如下:
例子:<cas:logout
var="edu.yale.its.tp.cas.client.filter.user"
logoutUrl="https://ssoi.uyunke.com:8443/cas/logout?service=http://my.app.com:8080/testssob/html/test2.jsp"
scope="session"/>
代码说明:
l 其中红色部分修改为登录当前应用系统的jsp的URL路径;
3. 在要加入登出的地方加入如下代码:
<a href="<eaglelink:contextpath/>/html/logout.jsp">登出</a>
代码说明:
l <eaglelink:contextpath/>是上下文路径
l 红色部分为上面创建的logout.jsp页面的路径
八、 关于任一应用系统与单点登录联调时的域名的配制,分为两种情况:
1. 本机应用系统与任意一台机器上布署单点登录服务联调时的配制:
l 配制单点登录服务和当前调试应用系统的域名与IP的映射(因为单点登录所有的配制都是通过域名来访问的),在“C:\Windows\System32\drivers\etc“目录下的hosts文件中配制域名与IP的对应关系,例如:
192.168.118.88 ssoi.uyunke.com ß单点登录域名
127.0.0.1 my.app.com ß当前要联调的应用系统域名(根据自己应用系统的域名修改),“127.0.0.1”这个是默认本机的IP,也可以使用本地网络联接属性中设置的IP。
2. 本机应用系统与公司服务器上布署的单点登录服务联调的配制:
l 因为服务器上的单点登录服务域名已经配制好了,所以只需要配制本机要联调应用系统的域名,在“C:\Windows\System32\drivers\etc”目录下的hosts文件中配制应用系统域名与本机IP的对应关系,例如:
127.0.0.1 my.app.com ß当前要联调的应用系统域名(根据自己的应用系统的域名修改)