mashiguang

小马快跑

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  20 随笔 :: 0 文章 :: 60 评论 :: 0 Trackbacks
 

使用cassso helloword

因为工作需要接触到sso,据知目前多数sso使用耶鲁的cas实现,且发现使用cas真的是很简单就可以做出一个单点登录系统来,cas还提供丰富的扩展功能,对于扩展功能日后再细细研究,这里只使用cas做一个hello world来记录本人的学习过程,如有幸被高人看到,还望指出弊病,不吝赐教。

在使用cas之前最好对数字证书有所了解,不了解也没有关系,跟着我的步骤也一样可以跑的通。

准备工作

需要的文件:

ü         Jdk6

ü         Tomcat

ü         cas-server-3.3.2

ü         cas-client-3.1.9

证书

下面是keytool命令的一些常用方法,先在这里认识一下它们,一会儿会用的到。

使用keytool命令生成密钥库

keytool -genkey -alias tomcat -keyalg RSA -dname "CN=pcma, OU=vanceinfo, O=vanceinfo, L=haidian, S=beijing, C=CN" -keystore c:"keystore5.jks

CN:主机名

OU:组织单位

O:组织

L:地区

S:城市

C:国家

如果需要指定密钥有效期,添加-validity 365即可,单位是天,如:
keytool -genkey -alias tomcat -keyalg RSA -dname "xxxxx" -keystore xxxxx -validity 365

导出证书

keytool -export -file c:/server5.crt -alias tomcat -keystore c:"keystore5.jks

将证书导入到客户端jdk

keytool -import -keystore "D:"Java"jdk1.6.0_14"jre"lib"security"cacerts" -file c:/server5.crt -alias tomcat

从密钥库中删除指定别名的证书

keytool -delete -noprompt -alias tomcat -keystore E:"apache-tomcat-6.0.20_2"conf"keystore2.jks

查看密钥库中的证书

keytool -list -v -keystore c:"keystore5.jks

配置tomcat

使用keytool命令生成密钥库。

配置%tomcat_home%/conf/server.xml使tomcat支持SSL协议,并指定密钥库。

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"

               maxThreads="150" scheme="https" secure="true"

               clientAuth="false" sslProtocol="TLS" keystorePass="mashiguang"

                        keystoreFile="${catalina.home}/conf/keystore5.jks"/>

部署cas server

解压缩cas-server-3.3.2-release.zip文件,在modules目录里找到cas-server-webapp-3.3.2.war文件,这就是一个做好了的cas服务端,我们做的sso helloword可以直接使用,只需把cas-server-webapp-3.3.2.war改了个简单点的名字,如cas.war,然后部署到tomcat即可。

浏览器访问https://pcma:8443/cas,如果打开显示的是cas默认的登录页面,则表示服务端已部署完毕。

客户端使用cas client

新建两个web工程,用于模拟单点登录系统中的客户端,并将cas-client-3.1.9"modules里的jar包放到web工程lib目录下,是主要的是cas-client-core-3.1.9.jar文件,把spring2.5也放到lib目录下。

Web.xml文件

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.4"

       xmlns="http://java.sun.com/xml/ns/j2ee"

       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

       xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee

       http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

       <context-param> 

        <param-name>contextConfigLocation</param-name> 

        <param-value> 

            /WEB-INF/config/casContext.xml  

        </param-value> 

    </context-param> 

    <listener> 

        <listener-class> 

            org.springframework.web.context.ContextLoaderListener  

        </listener-class> 

    </listener> 

    <!-- 负责用户认证 --> 

    <filter> 

        <filter-name>CAS Authentication Filter</filter-name> 

        <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class> 

        <!-- CAS login 服务地址--> 

        <init-param> 

            <param-name>casServerLoginUrl</param-name> 

            <param-value>https://pcma:8443/cas/login</param-value> 

        </init-param> 

        <init-param> 

            <param-name>renew</param-name> 

            <param-value>false</param-value> 

        </init-param> 

        <init-param> 

            <param-name>gateway</param-name> 

            <param-value>false</param-value> 

        </init-param> 

        <!-- 客户端应用服务地址--> 

        <init-param> 

            <param-name>serverName</param-name> 

            <param-value>http://pcma:8081</param-value> 

        </init-param> 

    </filter> 

    <!--负责Ticket校验--> 

    <filter> 

        <filter-name>CAS Validation Filter</filter-name> 

        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 

        <init-param> 

            <param-name>targetBeanName</param-name> 

            <param-value>cas.validationfilter</param-value> 

        </init-param> 

    </filter> 

    <filter-mapping> 

        <filter-name>CAS Authentication Filter</filter-name> 

        <url-pattern>/*</url-pattern> 

    </filter-mapping> 

    <filter-mapping> 

        <filter-name>CAS Validation Filter</filter-name> 

        <url-pattern>/*</url-pattern> 

    </filter-mapping> 

</web-app>

casContext.xml文件

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"

              "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

<bean id="cas.validationfilter" class="org.jasig.cas.client.validation.Cas10TicketValidationFilter"> 

        <property name="ticketValidator"> 

            <ref bean="cas10TicketValidator"/> 

        </property> 

        <property name="useSession"> 

            <value>true</value> 

        </property> 

        <!-- 客户端应用服务地址--> 

        <property name="serverName"> 

            <value>http://pcma:8081</value> 

        </property> 

        <property name="redirectAfterValidation"> 

            <value>true</value> 

        </property> 

    </bean> 

    <bean id="cas10TicketValidator" class="org.jasig.cas.client.validation.Cas10TicketValidator"> 

    <!-- 这里参数是cas服务器的地址--> 

        <constructor-arg index="0" value="https://pcma:8443/cas" /> 

    </bean> 

</beans> 

新建index.jsp文件

 <body>

   hello sso<br>

   <a href="http://192.168.29.131:8080/sso2">sso2</a>这个地址是另外一台机器上的sso客户端

 </body>

上面的web.xmlcasContext.xmlindex.jsp是两个客户端中的一个,另一个要根据实际情况修改。

最后不要忘记客户端的jdk要使用keytool命令导入证书文件。

测试

启动tomcat,测试器访问http://pcma:8081/sso,出现cas登录页面,输入相同的用户名和密码即可登录,登录成功后页面自动跳转回http://pcma:8081/sso,这时点击页面上的sso2链接,就可以自动登录并跳转到sso2应用。

如果输入用户名密码后提示下面的异常,是因为部署客户端的jdk没有导入证书文件的原因。

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target


源码

http://www.blogjava.net/Files/mashiguang/sso.zip

posted on 2009-12-07 09:50 mashiguang 阅读(1725) 评论(4)  编辑  收藏 所属分类: java web开发

评论

# re: hello cas 2009-12-07 13:02 20G高压锅炉管
抢个沙发  回复  更多评论
  

# re: hello cas 2009-12-08 10:50 凡客诚品
踩踩!!!!!  回复  更多评论
  

# re: hello cas 2009-12-08 20:27 smildlzj
以前用过一下...感觉用着不是很爽...

其实原理差不多....但是不知道为什么好像那么不爽....
原理都是.

unlogin->redirect sso server->redirect key to client->client get data from sso server

模拟以上原理...自己弄了一个企业内部的通行证系统,sso的用户绑定各子系统账号id.(不允许用户自己注册的,所以我自己手工绑定,而且垮几个应用的,绝对不是最基层的员工)

我倒希望哪位大大给我说下.cas有什么过人之处.

  回复  更多评论
  

# re: hello cas 2009-12-11 13:33 BeanSoft
收藏了 有时间看看 感谢楼主!  回复  更多评论
  


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


网站导航: