参考文献:
http://sucre.blog.51cto.com/1084905/683624
1.安装部署CAS Server
从官网下载CAS Server,今天发现CAS Server的官网居然被墙掉了,感叹天朝的神奇之处。后来从同事那里拷贝到了cas-server-3.5.2-release.zip。我将其发布到百度云盘上面:http://pan.baidu.com/s/1kUfzh
解压缩这个ZIP包以后,到路径\cas-server-3.5.2-release\cas-server-3.5.2\modules下拷贝cas-server-webapp-3.5.2.war这个war包至tomcat的webapps目录下。为了登录方便,我们将cas-server-webapp-3.5.2.war重命名为cas.war,启动tomcat以后会自动解压缩这个war,在webapps目录下生一个一个cas目录。
2.验证CAS Server安装成功
启动tomcat,访问https://localhost:8443/cas,如果能够出现以下界面就表示CAS Server部署成功。
虽然 CAS Server 已经部署成功,但这只是一个缺省的实现,在默认的server界面,只要输入用户名和密码相同,就可以登录,比如我们都输入aaa,然后点击登陆。
3.扩展认证接口(JDBC)
当然,在实际使用的时候,这样做肯定是不行的,还需要根据实际概况做扩展和定制,最主要的是扩展认证 (Authentication) 接口和 CAS Server 的界面。我们通常都会使用jdbc连接数据库进行认证,这种情况,用户名和密码被保存在数据库的某个表中。需要进行如下配置。
在MySQL数据库下创建一个叫做CAS的数据,然后在该数据库中创建一张app_user表,然后在这张表中插入数据,创建表和插入记录的sql脚本如下:
CREATE TABLE `app_user` ( `username` varchar(30) NOT NULL default '', `password` varchar(45) NOT NULL default '', PRIMARY KEY (`username`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; --并添加如下用户: INSERT INTO `app_user` (`username`,`password`) VALUES ('test','111'), ('user','222'), ('tom','333'), ('jim','000');
用编辑器打开%CATALINA_HOME%/webapps/cas/WEBINF/deployerConfigContext.xml,找到
<bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />
将其注释掉,然后在同一级别下面添加一个bean,其内容如下所示:
<!-- <bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" /> --> <bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"> <property name="sql" value="select password from app_user where username=?" /> <property name="dataSource" ref="dataSource" /> </bean>
然后在添加一个bean,这个bean是跟authenticationManager同一级别的,注意这个很重要,这个bean不是跟之前那个bean class同级。其内容如下:
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" > <property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property> <property name="url"><value>jdbc:mysql://localhost:3306/cas</value></property> <property name="username"><value>root</value></property> <property name="password"><value>root</value></property> </bean>
如果不想单独再创建一个bean id的话,可以通过通过如下配置完成,并且这个bean使用了密码校验,可以从数据表user中查询用户密码,并对密码进行MD5加密校验,这个认证器位于cas-server-support-jdbc包中。
<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"> <property name="dataSource"> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/cas?useUnicode=true&characterEncoding=utf-8" /> <property name="username" value="root" /> <property name="password" value="root" /> </bean> </property> <property name="sql" value="select password from app_user where username=?" /> <property name="passwordEncoder"> <bean class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder"> <constructor-arg value="MD5" /> </bean> </property> </bean>
然后从\cas-server-3.5.2-release\cas-server-3.5.2\modules目录下拷贝cas-server-support-jdbc-3.5.2.jar,再下载mysql-connector-java-5.1.26-bin.jar,将这两个文件拷贝到%CATALINA_HOME%/webapps/cas/WEB-INF/lib目录下。
此时在登录https://localhost:8443/cas,然后使用jim/000,test/111,tom/333,user/222,test/test,test/1234,可以发现,前面四组是可以通过验证的,而后面两组验证失败。通过验证以后,再次登陆https://localhost:8443/cas,会提示已经登录,此时如果要注销,可以在输入:https://localhost:8443/cas/logout。
在配置文件中可以看到,这里的认证器配置的是一个list,默认情况下,只要有一个认证器通过认证,就认为是合法的用户,建议选择合适的认证器放在最前面。比如说,如果不注释之前的SimpleTestUsernamePasswordAuthenticationHandler这个认证器。