最近有兴趣搭建了一下CAS SSO单点登录环境。
一、服务端的配置。
首先我先开始按照网上的教程配置https验证,
http://www.kafeitu.me/sso/2010/11/05/sso-cas-full-course.html
带有域名的验证始终不成功,我所以就取消的https验证。
CAS取消https验证。先把在 modules文件夹下找到 cas-server-webapp-3.3.3.war 放到一个tomcat下,启动tomcat,将自动解压缩war包,将项目文件夹名改为cas。
解压服务器端:
1.找到cas-servlet.xml,将 p:cookieSecure="true" 改为 p:cookieSecure="false" 如下:
<bean id="ticketGrantingTicketCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator" p:cookieSecure="false" p:cookieMaxAge="-1" p:cookieName="CASTGC" p:cookiePath="/cas" />
2.找到cas-servlet.xml,将 p:cookieSecure="改为 p:cookieSecure="false",改完如下:
<bean id="warnCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator" p:cookieSecure="false" p:cookieMaxAge="-1" p:cookieName="CASPRIVACY" p:cookiePath="/cas" />
3.找到deployerConfigContext.xml,在文件中找到“HttpBasedServiceCredentialsAuthenticationHandler”bean,然后添加:p:requireSecure="false",改完如下:
<bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler" p:httpClient-ref="httpClient" p:requireSecure="false" />
Tomcat可以不添加8443端口。
启动tomcat,用浏览器浏览 http://locahost:8080/cas。
出现
输入用户名:admin,密码:admin ,如果出现成功界面,说明cas服务器搭建成功,默认是用户名密码相同就是就登录成功。当然这只是简单验证,怎么进行数据库数据验证呢。
请参看上面的链接,讲的比较详细。记得往cas的lib里面添加相应的jdbc jar包 和cas-server-support-jdbc.jar。
二.客户端
把casclient.jar复制到工程TestPro /WEB-INF/lib下面。
web.xml的配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<filter>
<filter-name>CAS Filter</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>http://localhost:8080/cas/login</param-value>
</init-param>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>
<param-value>http://localhost:8080/cas/serviceValidate</param-value>
</init-param>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>
<param-value>10.11.68.54:8080</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CAS Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>welcome</servlet-name>
<servlet-class>welcome.WelcomePage</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>welcome</servlet-name>
<url-pattern>/WelcomePage</url-pattern>
</servlet-mapping>
</web-app>
在src下面 welcome包里面WelcomePage.java
package welcome;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import edu.yale.its.tp.cas.client.filter.CASFilter;
import edu.yale.its.tp.cas.client.filter.CASFilterRequestWrapper;
public class WelcomePage extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 6604894282088992512L;
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>Welcome to casTest2 sample System!</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Welcome to casTest1 sample System!</h1>");
CASFilterRequestWrapper reqWrapper = new CASFilterRequestWrapper(request);
out.println("<p>The logon user:" + reqWrapper.getRemoteUser() + "</p>");
HttpSession session = request.getSession();
out.println("<p>The logon user:" + session.getAttribute(CASFilter.CAS_FILTER_USER) + "</p>");
out.println("<p>The logon user:" + session.getAttribute("edu.yale.its.tp.cas.client.filter.user") + "</p>");
out.println("</body>");
out.println("</html>");
}
}
然后启动tomcat,在浏览中输入
http://localhost:8080/testPro/WelcomePage
你可以可以观看整个流程。
总结:该流程主要是非https验证的,个人感觉这么比较方便,https验证出了些问题,没有解决,主要是用域名输入显示不了,用localhost能显示,而我在系统hosts文件中已经加入了域名,并且多次尝试了证书认证还是不行。所以纠结了很久。