多的话我就不说了,概念什么的自己百度,直接上操作步骤:
一:cas是基于https的所以我们需要的就是证书啦:
1.cmd窗口输入:
keytool -genkey -alias ssodemo -keyalg RSA -keysize 1024 -keypass caiwenhao -validity 365 -keystore e:\menco.keystore -storepass caiwenhao
说明:注意一下这里的您的名字与姓氏这里,将用于域名访问
2.cmd导出证书:(-alias xxx 名字与上面生成证书的名字一致ssodemo)
keytool -export -alias ssodemo -keystore e:\menco.keystore -file e:\ssodemo.
crt -storepass caiwenhao
3.cmd安装客户端证书:(进入jdk的D:\jdk\jdk-7\jre\lib\security目录)
keytool -import -alias ssodemo -keystore cacerts -file e:\ssodemo.crt
说明:秘钥你敲入changeit就行了,这是java中cacerts证书库的默认密码
二:cas服务以及客户端1.修改host文件:添加域名
127.0.0.1 casserver.cwh.com
127.0.0.1 client.cwh.com
127.0.0.1 client.cwh.com
说明:这里的casserver.cwh.com对应的就是生成证书是你的名字与姓氏
2.应用3个tomcat,一个作为cas服务,另两个为客户端:
3.修改客户端端口,以免端口冲突:
说明:同样也把另一台client2端口前面加2做修改
4.cas服务启用https协议:(把下面的代码注释放开,添加keystoreFile="e:/menco.keystore" keystorePass="caiwenhao")
启动casserver检验ssl是否生效:
说明:我用的是chrom浏览器,会出现证书无效之类的,点击高级展开继续访问就可以了
5.下载cas-server-3.5.2获取cas-server-webapp-3.5.2.war放入D:\tomcat\apache-tomcat-8.0.26 - casserver\webapps改名:cas-server.war
启动casserver;访问cas https://casserver.cwh.com:8443/cas-server:
登录cas默认用户密码随便,主要用户和密码一致就可以了:
注销地址为https://casserver.cwh.com:8443/cas-server/logout:
三:cas连接数据库
打开D:\tomcat\apache-tomcat-8.0.26 - casserver\webapps\cas-server\WEB-INF\deployerConfigContext.xml文件
1.注销掉以下配置:
<bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />
2.引入所需jar包到D:\tomcat\apache-tomcat-8.0.26 - casserver\webapps\cas-server\WEB-INF\lib:
3.deployerConfigContext.xml添加datesource:
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/sso"/>
<property name="user" value="root"/>
<property name="password" value=""/>
</bean>
4.在authenticationHandlers 的list里面也就是我们注销掉配置的那段下面添加以下配置:
<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
<property name="dataSource" ref="dataSource" />
<property name="sql" value="select password from sec_user where account = ?" />
</bean>
说明:数据库和建表我就不说了
ok这样我们访问cas的时候原来的用户密码相同将不起作用,登录用我们数据库里面的数据就可以啦
四:客户端启用sso单点登陆
1.我们先启动我们client的tomcat,先访问下客户端是否没问题先
直接访问tomcat自带的一个examples例子就好了:http://client.cwh.com:28080/examples/servlets/servlet/HelloWorldExample
这样的话出现helloworld,那就没问题了
2.打开客户端examples这个例子的web.xml:D:\tomcat\apache-tomcat-8.0.26 - client1\webapps\examples\WEB-INF\web.xml:
在尾部添加以下代码:
<!-- 用于单点退出,该过滤器用于实现单点登出功能,可选配置-->
<listener>
<listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
</listener>
<!-- 该过滤器用于实现单点登出功能,可选配置 -->
<filter>
<filter-name>CAS Single Sign Out Filter</filter-name>
<filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CAS Single Sign Out Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>CAS Filter</filter-name>
<filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
<init-param>
<param-name>casServerLoginUrl</param-name>
<param-value>https://casserver.cwh.com:8443/cas-server/login</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>http://client.cwh.com:28080</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CAS Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 该过滤器负责对Ticket的校验工作,必须启用它 -->
<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://casserver.cwh.com:8443/cas-server</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>http://client.cwh.com:28080</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CAS Validation Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--
该过滤器负责实现HttpServletRequest请求的包裹,比如允许开发者通过HttpServletRequest的getRemoteUser()方法获得SSO登录用户的登录名,可选配置。
-->
<filter>
<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
<filter-class>org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--
该过滤器使得开发者可以通过org.jasig.cas.client.util.AssertionHolder来获取用户的登录名。比如AssertionHolder.getAssertion().getPrincipal().getName()。
-->
<filter>
<filter-name>CAS Assertion Thread Local Filter</filter-name>
<filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CAS Assertion Thread Local Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
说明:同样另一个客户端也跟着改,注意一下里面配置的端口
3.添加客户端所需jar包:
4.启动客户端client1和client2,
访问client1:http://client.cwh.com:18080/examples/servlets/servlet/HelloWorldExample
或访问client2:http://client.cwh.com:28080/examples/servlets/servlet/HelloWorldExample
页面将会被重定向到cas登录界面并且url会变成例如这个样子:
https://casserver.cwh.com:8443/cas-server/login?service=http%3A%2F%2Fclient.cwh.com%3A28080%2Fexamples%2Fservlets%2Fservlet%2FHelloWorldExample
然后我们输入登录后将访问到helloword;另一个客户端访问则不需要重新登录直接跳转到helloword
至此我们利用cas实现sso单点登陆就完成了!