最近有兴趣搭建了一下CAS SSO单点登录环境。
一、服务端的配置。
首先我先开始按照网上的教程配置https验证,
http://www.kafeitu.me/sso/2010/11/05/sso-cas-full-course.html
带有域名的验证始终不成功,我所以就取消的https验证。
CAS取消https验证。先把cas-server-3.3.3-release.zip解压 在 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文件中已经加入了域名,并且多次尝试了证书认证还是不行。所以纠结了很久。