资源描述
CAS配备手册
1 准备工具
1 cas-server-3.4.5-release.zip:
2 cas-client-3.2.0-release.zip:
2 配备环境
CAS 服务器信息
计算机名:IMC-Server
操作系统:Windows SP2
JDK:jdk1.6.0_21
Tomcat:apache-tomcat-6.0.30
浏览器:IE6
IP地址:10.12.21.45
CAS客户端信息
IP地址:10.12.21.140
Oracle数据库信息
IP地址:10.12.21.140
顾客名:scott
密码:tiger
3 CAS验证服务器配备
1 解压cas-server-3.4.5-release.zip到磁盘(我途径为D:\cas-server-3.4.5),进入D:\cas-server-3.4.5\modules文献夹下,把cas-server-webapp-3.4.5.war拷贝到Tomcat安装目录(我途径为D:\apache-tomcat-6.0.30)webapps文献夹下。为了以便在浏览器中浏览,把cas-server-webapp-3.4.5.war文献名修改为cas.war
2 运营Tomcat。在浏览器中输入:8080/cas,显示登录界面。输入顾客名和密码(顾客名和密码相等即可),登录成功。这样最简朴CAS验证服务器搭配成功。
4 数据库验证方式
4.1 密码已明文存在数据库中
1 复制D:\cas-server-3.4.5\modules下面所有jar包到D:\apache-tomcat-6.0.30\webapps\
cas\WEB-INF\lib下。数据库为Oracle,因而把Oracle驱动包也复制到lib文献夹下。注意删除重复jar包。
2 打开D:\apache-tomcat-6.0.30\webapps\cas\WEB-INF\deployerConfigContext.xml文献
在<bean id="authenticationManager"节点上面添加数据源信息:
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>
oracle.jdbc.driver.OracleDriver
</value>
</property>
<property name="url">
<value>
jdbc:oracle:thin:@10.12.21.140:1521:orcl
</value>
</property>
<property name="username">
<value>scott</value>
</property>
<property name="password">
<value>tiger</value>
</property>
</bean>
在该文献中搜索“SimpleTestUsernamePasswordAuthenticationHandler”
<bean
class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler"/>
这是cas提供最简朴验证方式,即顾客名和密码相等即可登录成功。
现假设咱们登录顾客名和密码存在于t_login表中,信息如下:
ID
USERNAME
PASSWORD
1
coolszy
123456
把上面bean给注销掉,添加如下信息:
<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
<property name="sql" value="select password from t_login where username=?" />
<property name="dataSource" ref="dataSource" />
</bean>
重启服务器,测试。固然咱们还可以指定表和字段
<bean class="org.jasig.cas.adaptors.jdbc.SearchModeSearchDatabaseAuthenticationHandler"
abstract="false" lazy-init="default" autowire="default">
<property name="dataSource" ref="dataSource" />
<property name="tableUsers" value="t_login" />
<property name="fieldUser" value="username"/>
<property name="fieldPassword" value="password"/>
</bean>
4.2 密码已密文存在数据库中
以上配备只适合密码已明文方式存储在数据库中,但是实际中咱们密码都是通过加密。下面演示下如果使用MD5加密密码。
一方面配备MD5,该配备信息放在数据源配备下面。
<bean id="passwordEncoder"
class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder">
<constructor-arg value="MD5"/>
</bean>
然后修改上面数据库验证配备,添加密码加密方式,修改后如下:
<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
<property name="sql" value="select password from t_login where username=?" />
<property name="dataSource" ref="dataSource" />
<property name="passwordEncoder" ref="passwordEncoder"/>
</bean>
4.3 使用自己编写加密类
上面简介了密码采用MD5加密配备方式,下面简介下如果使用咱们自己编写加密类。
1 新建一种Java项目,cas-server-core-3.4.5.jar包,
2 新建一种Java类,实现org.jasig.cas.authentication.handler.PasswordEncoder接口中public String encode(String arg0)办法,这是用来对输入密码进行加密,我这里命名为:PasswordEncrypt
3 在encode()办法中可以依照实际加密方式编写代码。
package szy.cas.encrypt;
import java.security.MessageDigest;
import org.jasig.cas.authentication.handler.PasswordEncoder;
/**
* @author coolszy
* @date Jan 21,
*/
public class PasswordEncrypt implements PasswordEncoder
{
public String encode(String password)
{
try
{
MessageDigest alg = MessageDigest.getInstance("SHA-1");
alg.reset();
alg.update(password.getBytes());
byte[] hash = alg.digest();
String digest = "";
for (int i = 0;i < hash.length;i++)
{
int v = hash[i] & 0xFF;
if (v < 16)
digest += "0";
digest += Integer.toString(v,16).toUpperCase();
}
return digest;
}
catch (Exception e)
{
e.printStackTrace();
return password;
}
}
}
编写完毕后,建议进行测试,避免错误发生。然后把该项目导出成jar包,并且把jar包拷贝到D:\apache-tomcat-6.0.30\webapps\cas\WEB-INF\lib下。然后修改上面添加
<bean id="passwordEncoder"
class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder">
<constructor-arg value="MD5"/>
</bean>
把class修改为咱们加密类,即
<bean id="passwordEncoder" class="szy.cas.encrypt.PasswordEncrypt">
<!--
<constructor-arg value="MD5"/>
-->
</bean>
测试,成功。
5 修改界面
5.1 修改验证通过后显示提示信息界面
修改D:\apache-tomcat-6.0.30\webapps\cas\WEB-INF\view\jsp\default\ui\
casGenericSuccess.jsp页面,添加如下内容调转到指定页面
<%
response.sendRedirect(".:8080/client/index.action");
%>
5.2 定义自己验证界面
cas给咱们提供了一种"default" 界面,该界面比较简朴,并且也不怎么美丽,因而咱们需要定制自己验证界面。下面简介一下如何设计自己界面。
1 进入D:\apache-tomcat-6.0.30\webapps\cas\WEB-INF\view\jsp,把default文献夹复制一份在本目录下,这里我把文献夹修改为coolszy。
2 进入D:\apache-tomcat-6.0.30\webapps\cas\WEB-INF\view\jsp\coolszy\ui。在该目录下你将会看到如下文献:
casConfirmView.jsp
在浏览器跳转到顾客想要访问页面之前如果有警告信息,这个页面将会被显示。
casGenericSuccess.jsp
这个页面普通不会被显示,除非咱们直接访问验证服务器验证界面。http://10.12.21.45:8080/cas。
casLoginView.jsp
重点修改页面。这个就是输入验证信息界面。
casLogoutView.jsp
注销界面
serviceErrorView.jsp
如果顾客想要访问服务没有使用CAS,这个页面将会显示出来。
注意:如果咱们所有业务系统都使用了CAS,这个界面则会没有任何作用。
如果想修改界面,我建议咱们一方面熟悉里面所有jsp页面。重点是casLoginView.jsp尚有includes目录下两个文献。
咱们在修改时尽量不要修改forms和逻辑标签。除非咱们比较熟悉她们。如果咱们定义页面中具有样式表,可直接修改D:\apache-tomcat-6.0.30\webapps\cas\themes\default目录下cas.css文献。固然咱们也可以自己创立一种css文献,个人建议也把文献放到D:\apache-tomcat-6.0.30\webapps\cas\themes中,可新建一种目录例如coolszy。接着咱们要修改jsp页面中引用途径。打开D:\apache-tomcat-6.0.30\webapps\cas\WEB-INF\view\jsp\
coolszy\ui\includes\top.jsp文献。找到如下代码:
<spring:theme code="standard.custom.css.file" var="customCssFile" />
咱们需要standard.custom.css.file值。该值存在于
D:\apache-tomcat-6.0.30\webapps\cas\WEB-INF\classes\cas-theme-default.properties文献中。修改为咱们途径。
引用图片也需要注意相对途径和绝对途径。
3 进入D:\apache-tomcat-6.0.30\webapps\cas\WEB-INF\classes目录,复制
default_views.properties,我这里重新命名为coolszy_views.properties。打开该文献,修改页面途径,我这里是把default所有替代为coolszy。
注意:该目录下存在诸多messages_*.properties文献,重要是为了国际化。我把不需要语言给删除掉。同步修改messages_zh_CN.properties文献中信息,使得提示信息更加符合咱们需求。这个文献我是在Eclipse中修改。我Eclipse安装了PropertiesEditor插件。
4 打开D:\apache-tomcat-6.0.30\webapps\cas\WEB-INF\cas.properties文献,把
cas.viewResolver.basename=default_views
修改为
cas.viewResolver.basename=coolszy_views
5 启动服务器,测试下效果。有也许显示本来界面,可尝试把D:\apache-tomcat-6.0.30\
work\Catalina 目录下文献夹清空掉。
6 服务器端超时配备
打开D:\apache-tomcat-6.0.30\webapps\cas\WEB-INF\spring-configuration\目录中
applicationContext.xml文献,修改如下某些信息:
<bean id="httpClient" class="org.jasig.cas.util.HttpClient"
p:readTimeout="5000"
p:connectionTimeout="5000"/>
修改咱们所需要超时时间。
7 HTTPS验证配备
7.1 普通证书
注:如果电脑上没有设立环境变量JAVA_HOME,请设立完毕后再操作。
7.1.1 创立key
1 进入cmd。输入“cd\”来到系统根目录
2 输入命令
keytool -genkey -alias casserver -keyalg RSA -keypass changeit -storepass changeit -keystore server.keystore -validity 3600
注:参数 -validity 指证书有效期(天),缺省有效期只有90天。其他参数含义请在cmd上输入keytool 回车即可看到。
在生成证书时会让你输入信息,其中“您名字与姓氏是什么?”这个内容必要填写cas服务器所相应域名或者服务器计算机名,我这里使用计算机名:
这样在咱们C盘根目录下生成一种名为server.keystore证书。
7.1.2 将证书导入JDK证书信任库中
1 导出证书,命令如下:
keytool -export -trustcacerts -alias casserver -file server.cer -keystore server.keystore -storepass changeit
注:server.keystore 为咱们上一步生成证书。
2 导入到证书信任库,命令如下:
keytool -import -trustcacerts -alias casserver -file server.cer -keystore "C:\Program Files\Java\jdk1.6.0_21\jre\lib\security\cacerts" -storepass changeit
注:JDK途径依照你电脑安装位置进行修改。此外如果你电脑中安装JRE,还应执行如下命令:
keytool -import -trustcacerts -alias casserver -file server.cer -keystore "C:\Program Files\Java\jre6\lib\security\cacerts" -storepass changeit
3 顺便补充此外两个命令
列出所导入证书
keytool -list -v -keystore "C:\Program Files\Java\jdk1.6.0_21\jre\lib\security\cacerts"
删除存在证书
Keytool -delete -trustcacerts -alias casserver -keystore "C:\Program Files\Java\jdk1.6.0_21\jre\lib\security\cacerts" -storepass changeit
注:如果提示输入密码,则输入:changeit
7.1.3 配备TOMCAT服务器
1 打开D:\apache-tomcat-6.0.30\conf\server.xml 文献,找到:
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />
该内容默认是被注视掉。咱们把该段修改为:
<Connector protocol="org.apache.coyote.http11.Http11NioProtocol"
port="8443" minSpareThreads="5" maxSpareThreads="75"
enableLookups="true" disableUploadTimeout="true"
acceptCount="100" maxThreads="200"
scheme="https" secure="true" SSLEnabled="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="C:\server.keystore"
keystorePass="changeit"/>
其中 keystoreFile为已经生成服务器证书地址
keystorePass为自定义服务器证书密码
7.1.4 测试
打开浏览器输入
:8443/cas/
如果浮现如下警告信息,点击拟定。
7.2 使用CA证书
在某些公司中会使用CA证书进行验证,本节解说如何使用CA证书。
7.2.1 准备工作
使用如下命令把上某些证书从CAS验证服务器和业务服务器上JRE中删除
Keytool -delete -trustcacerts -alias casserver -keystore "C:\Program Files\Java\jdk1.6.0_21\jre\lib\security\cacerts" -storepass changeit
Keytool -delete -trustcacerts -alias casserver -keystore "C:\Program Files\Java\jre6\lib\security\cacerts" -storepass changeit
7.2.2 创立key
在cas验证服务器输入命令
keytool -genkey -alias -keyalg RSA -keysize 2048 -keypass changeit -storepass changeit -keystore coolszy.jks -validity 3600
其中.com为CAS验证服务器相应域名。
在生成证书时会让你输入信息,其中“您名字与姓氏是什么?”这个内容同上:
这样在咱们C盘根目录下生成一种名为coolszy.jks文献。
7.2.3 创立证书祈求
命令:
keytool -certreq -alias -file coolszy.csr -keystore coolszy.jks -keypass changeit -storepass changeit
7.2.4 申请CA证书
1进入公司CA证书申请网站
2点击“申请一种证书”——“高档证书申请”——“使用 base64 编码 CMC 或 PKCS #10 文献提交 一种证书申请,或使用 base64 编码 PKCS #7 文献续订证书申请。”——
“浏览要插入文献”——选取“C:\coolszy.csr”——“提交”——“选取Base 64 编码”——“下载证书链”——保存certnew.p7b。
7.2.5 导入证书
keytool -import -trustcacerts -alias -file c:\certnew.p7b -keystore coolszy.jks -keypass changeit -storepass changeit
7.2.6 CAS验证服务器端Tomcat配备
修改server.xml,启动启动https;
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keyAlias="" keystoreFile="C:\coolszy.jks"
keypass="changeit" />
8 业务系统配备
8.1 JAVA版本
8.1.1 添加jar包
解压cas-client-3.2.0-release.zip到磁盘上,我这里放在D盘中。并且把
D:\cas-client-3.2.0\modules目录中所有jar包拷贝到咱们业务系统中。注意删除重复jar包。
8.1.2 导入证书
a.普通证书
咱们需要把CAS验证服务器上生成server.cer证书导入到咱们业务系统JDK上。
keytool -import -trustcacerts -alias casserver -file server.cer -keystore "C:\Program Files\Java\jdk1.6.0_21\jre\lib\security\cacerts" -storepass changeit
b.使用CA证书
1进入公司CA证书申请网站
2 点击“下载一种 CA 证书,证书链或 CRL”
3 编码方式选取“Base 64”
4 点击“下载 CA 证书”,保存到磁盘上
5 在命令控制台执行如下命令
keytool -import -keystore "C:\Program Files\Java\jre6\lib\security\cacerts" -file c:\certnew.cer -alias -storepass changeit
keytool -import -keystore "C:\Program Files\Java\jdk1.6.0_21\jre\lib\security\cacerts" -file c:\certnew.cer -alias -storepass changeit
注意:依照JDK和JRE安装途径进行相应修改,如果没有安装JRE,则第一条命令不需要执行。
8.1.3 配备业务系统web.xml文献
在业务系统web.xml中添加如下配备信息
<!-- CAS 客户端配备 -->
<filter>
<filter-name>CAS Authentication Filter</filter-name>
<filter-class>
org.jasig.cas.client.authentication.AuthenticationFilter
</filter-class>
<!-- CAS验证服务器地址,有域名填写域名 -->
<init-param>
<param-name>casServerLoginUrl</param-name>
<param-value>
https://10.12.21.46: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://10.12.21.140:8080</param-value>
</init-param>
</filter>
<!--负责Ticket校验-->
<filter>
<filter-name>CAS Validation Filter</filter-name>
<filter-class>
org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter
</filter-class>
<init-param>
<param-name>casServerUrlPrefix</param-name>
<param-value>https://IMC-Server:8443/cas/</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>http://10.12.21.140:8080</param-value>
</init-param>
<init-param>
<param-name>useSession</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>redirectAfterValidation</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter>
<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
<filter-class>
org.jasig.cas.client.util.HttpServletRequestWrapperFilter
</filter-class>
</filter>
<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 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>
<filter-mapping>
<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CAS Assertion Thread Local Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
注:蓝色某些依照实际状况做相应修改。红色某些高亮IMC-Server是咱们在生成证书时填写“您名字与姓氏是什么?”。8433为Tomcat上SSL端口,在在现实中咱们普通使用80端口。如果使用80端口,则端标语不需要写在配备文献上。
8.1.4 发布系统,测试。
咱们访问业务系统地址::8080/casclient/
如果浮现如下警告信息,点击“继续浏览此网站(不推荐)。”
然后咱们输入顾客名和密码,登录成功。
8.2 C#版本
9 获取登录顾客信息
9.1 获得登录顾客名
在进行认证时,咱们需要输入顾客名和密码。怎么才干获得咱们输入顾客名呢?通过下面这两句代码,咱们就可以得到顾客名信息。
AttributePrincipal principal = (AttributePrincipal) request.getUserPrincipal();
String username = principal.getName();//获取顾客名
9.2 获取更全面顾客信息
之前咱们假设顾客验证信息存储在t_login表中,表构造如下:
ID
USERNAME
PASSWORD
1
coolszy
123456
这张表中有三个字段。假设当前还存在此外一张表t_user。该表记录了顾客详细信息。咱们可以通过上一节办法获取username值到t_user表中进行查询,这样咱们就可以获得更详细顾客信息。
但是如果咱们t_login表构造如下:
ID
USERNAME
PASSWORD
NAME
1
coolszy
123456
张三
在登录成功后,咱们但愿在页面上显示NAME值,这该怎么获取呢?
1一方面,打开D:\apache-tomcat-6.0.30\webapps\cas\WEB-INF\deployerConfigContext.xml文献
找到如下配备信息:
<!--
Bean that defines the attributes that a service may return. This example uses the Stub/Mock version. A real implementation
may go against a database or LDAP server. The id should remain "attributeRepository" though.
-->
<bean id="attributeRepository"
class="org.jasig.services.persondir.support.StubPersonAttributeDao">
<property name="backingMap">
<map>
<entry key="uid" value="uid" />
<entry key="eduPersonAffiliation" value="eduPersonAffiliation" />
<entry key="groupMembership" value="groupMembership" />
</map>
</property>
</bean>
注意看一下上面注释信息。咱们把该段信息修改如下:
<bean class="org.jasig.services.persondir.support.jdbc.SingleRowJdbcPersonAttributeDao"
展开阅读全文