cas-server-3.0.5 (http://www.ja-sig.org/downloads/cas/cas-server-3.0.5.zip))
1. 第一步,创建证书
Dos命令在%javahome%bin下
2. keytool -genkey -alias tomcat -keystore c:/mykeystore -dname "CN=jdeps, OU=localhost, O=localhost, L=SH, ST=SH, C=CN" -keypass changeit -storepass changeit
3. 注意名字与姓氏是(first and last name)要填计算机名称,不能是IP地址,其他随便写。
4. 第二步,导出证书
5. keytool -export -alias tomcat -keystore c:/mykeystore -file c:/mycerts.cer -storepass changeit
6. 第三步,把导出的证书导入到客户端服务器
7. keytool -import -trustcacerts -alias tomcat -keystore "%JAVA_HOME%/JRE/LIB/SECURITY/CACERTS" -storepass changeit -file c:/mycerts.cer
有一个提示:是否信任这个证书,输入 Y,回车。
8. 修改%tomcat_home%/conf/server.xml,打开https
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="c:/mykeystore" keystorePass="changeit" />
9. 修改%tomcat_home%/webapps/cas/WEB-INF/deployerConfigContext.xml
<bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />
注释掉该行,在其下加入:
<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
<property name="sql" value="select password from s_user where login_id=?" />
<property name="dataSource" ref="dataSource" />
</bean>
并添加一个bean:
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" destroy-method="close">
<property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property>
<property name="url"><value>jdbc:mysql://localhost:3306/hkdse?useUnicode=true&characterEncoding=UTF-8</value></property>
<property name="username"><value>root</value></property>
<property name="password"><value>123456</value></property>
</bean>
1. 在Mysql中建一个名为hkdse的数据库,
create database hkdse;
再创建一张s_user表,
CREATE TABLE `s_user` (
`id` bigint(20) NOT NULL auto_increment,
`login_id` varchar(255) NOT NULL,
`password` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
insert into `s_user` (`id`, `login_id`, `password`) values('1','bruno','bruno');
2. 将cas-server-3.0.5/target/cas-server-jdbc-3.0.5.jar文件复制到%tomcat_home%/webapps/cas/WEB-INF/lib。
3. 将Mysql的JDBC驱动mysql-connector.jar复制到%tomcat_home%/webapps/cas/WEB-INF/lib。
4. 启动Tomcat,在浏览器中输入https://localhost:8443/cas/login,看到CAS的登陆界面说明CAS安装成功。
1. 导航到Control Panel->Settings->Authentication->CAS,输入以下值:
Enabled = true
Import from LDAP = false
Login URL = https://jdeps:8443/cas/login
Logout UR = https://jdeps:8443/cas/logout
Server Name = localhost:8080
Service URL = http://localhost:8080/c/portal/login
Validate URL = https://jdeps:8443/cas/proxyValidate
5. 点击保存,关闭浏览器。
如果没在Liferay下,只是普通的Web程序可用Filter来实现,打开Web-INF/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>
<param-value>https://xyb:8443/cas-web/login</param-value>
</init-param><!--这里的xyb是CAS服务端的IP或机器名-->
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>
<param-value>https://xyb:8443/cas-web/proxyValidate</param-value>
</init-param>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>
<param-value>localhost:8080</param-value><!--client:port就是需要CAS需要拦截的地址和端口,一般就是这个TOMCAT所启动的IP和port-->
</init-param>
</filter>
<filter-mapping>
<filter-name>CASFilter</filter-name>
<url-pattern>/*</url-pattern><!--这里就是你要拦截的URL请求-->
</filter-mapping>
最后一步,在客户端获取CAS认证通过的用户名,并修改身份验证程序为只通过用户名来验证。如是在Liferay下就不用做这一步了,Liferay中本身的验证是ScreenName字段
1、在JSP或Servlet中的用法:
<%@ page import="edu.yale.its.tp.cas.client.filter.CASFilter" %>
<%@ page import="javax.servlet.http.HttpServletRequest" %>
<%@ page import="javax.servlet.http.HttpSession" %>
<%
HttpSession ses = request.getSession();
String screenName =
(String)ses.getAttribute(CASFilter.CAS_FILTER_USER);
System.out.println("screenName==:"+screenName);
%>
2、在Java中通过 Session 获取登录用户名
// 以下两者都可以
session.getAttribute(CASFilter.CAS_FILTER_USER);
session.getAttribute("edu.yale.its.tp.cas.client.filter.user");
3、在 JSTL 中获取用户名的方法
<c:out value="${sessionScope[CAS:'edu.yale.its.tp.cas.client.filter.user']}"/>